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 و عکسها |