MVC مخفف Model-View-Controller هست و یکی از الگوهای معروف طراحی نرم‌افزار (design pattern) در توسعه اپلیکیشن‌های وب و دسکتاپ محسوب میشه. این الگو به تفکیک وظایف کمک می‌کنه و باعث میشه کد تمیزتر، قابل نگهداری‌تر و توسعه‌پذیرتر باشه.

اجزای اصلی MVC:

1. Model (مدل)

مدل وظیفه داره با داده‌ها کار کنه. یعنی:

  • ذخیره‌سازی و واکشی داده‌ها از دیتابیس
  • انجام منطق بیزینسی (Business Logic)
  • پاسخ دادن به درخواست‌های View یا Controller برای داده‌ها

2. View (نمایش)

ویو مسئول نمایش داده‌ها به کاربره. یعنی:

  • همان چیزی است که کاربر در مرورگر می‌بینه
  • فقط داده‌هایی رو که از مدل گرفته به شکل HTML/CSS (یا API خروجی) ارائه می‌ده
  • خودش کاری با منطق برنامه نداره

3. Controller (کنترل‌کننده)

کنترلر رابط بین Model و View است. یعنی:

  • درخواست کاربر (مثلاً کلیک یا ورود اطلاعات) رو دریافت می‌کنه
  • تصمیم می‌گیره باید چه مدلی فراخوانی بشه
  • داده‌های مدل رو به ویو پاس می‌ده

کاربرد MVC در برنامه‌نویسی وب:

در وب اپلیکیشن‌ها، مثل سایت‌های دینامیک یا SPAها، این الگو بسیار کاربردیه. مثلاً:

مزایا:

  • جداسازی concerns: می‌تونی به راحتی بخش طراحی (UI) رو تغییر بدی بدون اینکه منطق برنامه خراب بشه
  • قابل‌تست بودن: به راحتی می‌تونی مدل یا کنترلر رو تست واحد (unit test) بنویسی
  • توسعه‌ی تیمی راحت‌تر: طراح UI می‌تونه روی View کار کنه، بک‌اند دولوپر روی Model و کنترلر

مثال ساده:

فرض کن سایتی داریم برای رزرو رستوران:

  • Model: کلاس Reservation که رزروها رو از دیتابیس می‌خونه یا ذخیره می‌کنه
  • View: صفحه HTML برای نمایش فرم رزرو
  • Controller: کنترلری که فرم رو پردازش می‌کنه، داده‌ها رو به مدل می‌ده و بعد نتیجه رو به ویو پاس می‌ده

در چه فریم‌ورک‌هایی از MVC استفاده می‌شه؟

  • Django (پایتون) – ساختارش شبیه MVC هست ولی اسم‌هاش کمی فرق داره (MTV)
  • Ruby on Rails
  • ASP.NET MVC
  • Laravel (PHP)
  • Angular (با اینکه MVC کلاسیک نیست، ولی مفاهیم مشابهی داره)

یک ساختار ساده و تمیز برای پیاده‌سازی الگوی MVC با PHP خالص (pure PHP) بدون استفاده از فریم‌ورک خاص :

ساختار فولدرها:

project/
│
├── index.php             <-- نقطه ورود برنامه
├── .htaccess             <-- برای ریدایرکت درخواست‌ها به index.php
│
├── core/                 <-- کلاس‌های پایه مثل کنترلر و روتینگ
│   ├── Controller.php
│   └── Router.php
│
├── controllers/          <-- کنترلرها
│   └── HomeController.php
│
├── models/               <-- مدل‌ها (منطق داده و پایگاه‌داده)
│   └── Post.php
│
├── views/                <-- ویوها (HTML Template)
│   └── home.php
│
└── public/               <-- فایل‌های استاتیک مثل CSS, JS, تصاویر
    └── style.css

توضیح نقش هر بخش:

مسیرنقش
index.phpنقطه شروع اپلیکیشن – تمام درخواست‌ها به این فایل میان
core/Router.phpتصمیم‌گیری درباره اینکه کدام کنترلر و متد اجرا بشه
core/Controller.phpکلاس پایه برای همه کنترلرها (برای اشتراک‌گذاری متدهای مشترک)
controllers/کنترلرهای مختلف برای صفحات یا بخش‌های سایت
models/کار با دیتابیس و داده‌ها
views/فایل‌های HTML برای نمایش به کاربر
public/منابع استاتیک مثل CSS و عکس‌ها