1. MVC چیست؟
الگوی اِم.وی.سی یا MVC یک الگو برای طراحی نرم افزار است. MVC مخفف Model View Controller است. هنگامی که از MVC برای طراحی یک نرم افزار استفاده میکنیم، منطق و کاری که برنامه قرار است انجام دهد را به سه بخش مدل، ویو و کنترلر تقسیم میکنیم. هدف این تقسیم بندی این است که توصیف درون سیستمی داده ها با داده ای که به کاربر نمایش داده میشود متفاوت باشد. یعنی داده ها وقتی به کاربر نمایش داده می شوند و وقتی خود سیستم در حال استفاده از آن ها است، متفاوت باشد.
بنابراین MVC الگویی در طراحی نرم افزار است که معمولاً برای پیاده سازی رابط های کاربر (GUI)، داده ها و منطق برنامه استفاده می شود. این الگو بر جدایی بین منطق نرم افزار و چیزی که به کاربر نمایش داده می شود، تأکید دارد. این تفکیک تقسیم کار بهتر و نگهداری بهتر را فراهم می کند. برخی دیگر از الگوهای طراحی مبتنی بر MVC هستند، مانند MVVM (Model-View-Viewmodel)، MVP (Model-View-Presenter) و MVW (Model-View-Whatever).
توجه کنید که MVC یک الگوی طراحی است و مختص یک زبان برنامه نویسی خاص یا یک پلتفرم خاص نیست. بنابراین از MVC می توان در محیط های مختلف استفاده کرد.
2. هدف از MVC چیست؟
همانطور که در بالا ذکر شد، چارچوب نرمافزار MVC به ما کمک میکند تا جنبههای مختلف برنامه (منطق ورودی، منطق تجاری و رابط کاربری گرافیکی) را از هم جدا کنیم، در حالی که یک اتصال خوب بین این عناصر ایجاد میکند. بنابراین، منطق اطلاعات در Model وجود دارد و رابط کاربری گرافیکی در View تعلق دارد. همچنین منطق ورودی (Input Logic) به Controller تعلق دارد. این جداسازی به شما در مدیریت پیچیدگی هنگام ساخت یک برنامه کمک میکند، زیرا شما را قادر میسازد تا در یک زمان روی یک جنبه از پیادهسازی تمرکز کنید. چارچوب MVC به چند دلیل ایده خوبی است، از جمله:
- توسعه همزمان – از آنجایی که MVC اجزای مختلف یک برنامه را جدا می کند، توسعه دهندگان می توانند به طور موازی بر روی اجزای مختلف بدون تأثیر یا مسدود کردن یکدیگر کار کنند.
- قابلیت استفاده مجدد – نمای یکسان (یا مشابه) برای یک برنامه را می توان برای برنامه دیگری با داده های مختلف بازسازی کرد زیرا نمای به سادگی نحوه نمایش داده ها به کاربر را کنترل می کند.
- مقیاس پذیری بهبود یافته – اگر برنامه شما شروع به تجربه مشکلات عملکرد کند زیرا دسترسی به پایگاه داده کند است، می توانید سخت افزاری را که پایگاه داده را اجرا می کند بدون اینکه سایر اجزا تحت تأثیر قرار گیرند ارتقا دهید.
- جفت کم – ماهیت چارچوب MVC به گونه ای است که جفت کم بین مدل ها، نماها یا کنترلرها وجود دارد.
- توسعه پذیری بهتر – از آنجایی که مؤلفه ها وابستگی کمی به یکدیگر دارند، ایجاد تغییرات در یکی (برای رفع اشکال یا تغییر عملکرد) تأثیری بر دیگری ندارد.
3. ساختار MVC
در تصویر به وضوح عملکرد ساختاری الگو MVC را مشاهده میکنید. مثلا فرض کنید کاربر با وب سایت به سافت در حال تعامل است. اگر از معماری MVC در این وب سایت استفاده شده باشد:
- کاربر از طریق یک View با وب سایت تعامل می کند.
- به محض اینکه درخواستی از سمت کاربر صادر شود، View این درخواست را به Controller اطلاع میدهد.
- سپس Controller این وظیفه را دارد که درخواست را به دست Model مربوطه برساند.
- Model مربوطه پس از انجام شدن تغییرات، به View می گوید که تغییرات انجام شده است.
- در نهایت View برای اینکه اخرین تغییرات را به کاربر نمایش دهد، داده های جدید را از Model دریافت میکند تا به کاربر نمایش دهد.
1.3 ویو (View) در MVC چیست؟
View بخشی از برنامه است که داده ها را به کاربر نشان می دهد. Viewها مطابق با داده های مدل ایجاد می شوند. یک View از مدل درخواست می کند تا اطلاعاتی را ارائه دهد تا خروجی را به کاربر ارائه دهد. View همچنین داده های نمودارها و جداول را نشان می دهد. به عنوان مثال، هر View مشتری شامل تمام اجزای رابط کاربری مانند جعبه های متن، کشویی و غیره می شود.
2.3 کنترلر (Controller) در MVC چیست؟
Controller بخشی از برنامه است که تعامل کاربر را مدیریت می کند. یعنی درخواست هایی که از سمت کاربر صادر می شود را به مدل مرتبط با درخواست ارسال می کند. بنابراین، Controller ورودیهای ماوس و صفحهکلید را از کاربر تفسیر میکند، Model و View را بهصورت مناسب تغییر میدهد.
یک Controller دستورات خود را به Model ارسال می کند تا وضعیت آن را به روز کند (به عنوان مثال، ذخیره یک سند خاص). Controller همچنین دستوراتی را به View مرتبط خود ارسال می کند تا نمایش View را تغییر دهد (مثلاً پیمایش یک سند خاص).
3.3 مدل (Model) در MVC چیست؟
Model داده ها و منطق مربوط به آن را ذخیره می کند. Model داده هایی که بین اجزای کنترل کننده یا هر منطق تجاری مرتبط دیگری منتقل می شود را توصیف می کند. به عنوان مثال، یک شی Controller اطلاعات مشتری را از پایگاه داده دریافت می کند. داده ها را دستکاری می کند و به پایگاه داده ارسال می کند یا از آن برای ارائه همان داده ها استفاده می کند. برای این کار، Controller با Model ارتباط برقرار می کند. Model همچنین به درخواست View پاسخ می دهد و همچنین به دستورالعمل های Cبرای به روز رسانی خود پاسخ می دهد. همچنین پایین ترین سطح الگو است که وظیفه نگهداری داده ها را بر عهده دارد.
3. چرا MVC بوجود آمد؟
در قدیم، کاربرد اصلی MVC در ساختن GUI برای نرم افزارها بود. مثلا وقتی یک برنامه داریم که با یک دیتابیس کار میکند، شکل نمایش داده ها در درون سیستم و موقعی که به کاربر نمایش می دهیم متفاوت است. بنابراین گویی دو نوع توصیف از داده ها داریم:
- داده ها وقتی به کاربر نمایش داده می شوند
- داده ها وقتی در درون سیستم مورد استفاده قرار می گیرند
4. امکانات MVC
تا به اینجا مزیت کلی MVC را متوجه شدیم. اما در این قسمت کمی دقیق تر به بررسی مزیت های آن می پردازیم. برنامه هایی که با الگوی MVC طراحی و پیاده سازی می شوند، قابلیت های زیر را خواهند داشت:
- قابلیت تست آسان و راحت. چارچوب بسیار قابل آزمایش، توسعه پذیر و با قابلیت اتصال به دیگر کامپوننت ها.
- برای طراحی معماری برنامه وب با استفاده از الگوی MVC، کنترل کاملی بر HTML و همچنین URL های شما ارائه می دهد
- از ویژگی های موجود ارائه شده توسط ASP.NET، JSP، Django و غیره استفاده کنید.
- جداسازی منطق: مدل، نمایش، کنترلر. جداسازی وظایف برنامه یعنی. منطق تجاری، منطق اول و منطق ورودی
- مسیریابی URL برای URL های دوستدار SEO. URL قدرتمند – نقشه برداری برای URL های قابل درک و جستجو
- پشتیبانی از توسعه تست محور (TDD)
5. یک مثال از MVC
یکی از مثال هایی که عموما برای فهم بهتر MVC مطرح می شود، مثال رستوران است.
- فرض کنید به یک رستوران می روید. شما به آشپزخانه رستوران نخواهید رفت و غذایی تهیه نمی کنید. در عوض، شما به آنجا می روید و منتظر می مانید تا گارسون بیاید.
- حالا پیشخدمت نزد شما می آید و شما غذا را سفارش می دهید. گارسون نمی داند شما کی هستید و چه می خواهید، فقط جزئیات سفارش غذای شما را یادداشت میکند.
- سپس، پیشخدمت به آشپزخانه حرکت می کند. در آشپزخانه گارسون غذای شما را آماده نمی کند. او تنها سفارش شما را به اطلاع آشپز می رساند.
- آشپز غذای شما را آماده می کند. گارسون سفارش شما را به همراه شماره میز شما به او می دهند.
- آشپز برایتان غذا را می پرد. او از مواد اولیه برای پختن غذا استفاده می کند. بیایید فرض کنیم که شما یک ساندویچ سبزیجات سفارش دهید. سپس به نان، گوجه فرنگی، سیب زمینی، فلفل دلمه ای، پیاز، پنیر و … نیاز دارد که از یخچال تهیه می کند.
- حالا وظیفه پیشخدمت این است که این غذا را به بیرون از آشپزخانه منتقل کند.
- حالا از آنجایی که پیشخدمت می داند که کدام غذا را سفارش داده اید و چگونه سرو می شود، آن را به دست شما میرساند.
در اینجا:
- شما کاربر هستید
- غذا View است
- گارسون Controller است
- آشپز Model است.
غذا چیزی است که شما میبینید ولی از نحوه تهیه آن و نحوه رد و بدل شدن آن در آشپزخانه خبر ندارید. در عین حال گارسون به عنوان یک Controller تمامی سفارشات را از مشتریان دریافت می کند و به نتیجه سفارشات را به آن ها برمیگرداند. در نهایت، آشپز همان Model است که با ترکیب مواد غذایی موجود در انبار و یخچال، غذای مورد نیاز را تهیه می کند.
6. مزایا و معایب MVC
همانند هر معماری و ساختار دیگری، MVC نیز دارای معایب و مزایایی است. با بررسی این معایب و مزایا بطور سطحی متوجه میشویم که آیا MVC برای پروژه ما مناسب است یا خیر. از اصلی ترین مزایا MVC می توان به موارد زیر اشاره کرد:
- معماری MVC رابط کاربری را از منطق تجاری جدا می کند.
- قطعات قابل استفاده مجدد هستند. (Reusability)
- نگهداری (Maintenance) آسان
- اجزای مختلف برنامه در MVC می توانند به طور مستقل مستقر و نگهداری شوند.
- این معماری کمک میکند تا بتوانیم اجزای مختلف را جداگانه تست کنیم.
در عین حال معایب MVC بصورت زیر هستند:
- پیچیدگی زیاد است.
- برای کاربردهای کوچک مناسب نیست.
- ناکارآمدی دسترسی به داده ها در View.
نتیجه گیری
بنابراین درک MVC آنقدرها هم آسان نیست، واقعاً سخت است، اما یادگیری آن غیرممکن نیست و هر توسعهدهندهای باید آن را در هنگام توسعه یک برنامه در نظر داشته باشد. فقط به خاطر داشته باشید که MVC یک معماری است که نرم افزار شما را به اجزای کوچکتر تقسیم می کند. این Model با داده ها و منطق سیستم شما سروکار دارد. همچنین View فقط داده ها را نمایش می دهد. کنترلرنیز ارتباط بین مدل و نما را حفظ می کند. این “تقسیم” خوانایی و مدولار بودن را امکان پذیر می کند و همچنین بخش تست را آسان تر می کند.
فقط این نکات کلیدی را در نظر داشته باشید:
- MVC یک الگوی معماری است که از سه قسمت Model، View، Controller تشکیل شده است.
- Model: منطق داده ها را کنترل می کند.
- View: اطلاعات مدل را به کاربر نمایش می دهد.
- Controller: جریان داده را به یک شی مدل کنترل می کند و هر زمان که داده ها تغییر می کند، نمای را به روز می کند.
- حتی اگر بسیار محبوب است و معایبی هم دارد، اصلی ترین آن پیچیدگی است.
عالی