(Model View Controller) MVC یک معماری برنامه نویسی است که نرم افزار را به سه بخش مجزا تقسیم میکند. این بخشها عبارت اند از Model برای ارتباط با پایگاه داده، View برای ایجاد یک رابط کاربری برای نمایش و تغییر در دادههای پایگاه داده و Controller برای پردازش درخواستهای کاربر.
فرض کنید به رستورانی می روید و سفارش غذا می دهید:
- شما یک User هستید.
- گارسون Controller است و خواسنه شما را به آشپزخانه می برد.
- آشپزخانه Model است و غدا را با مواد مورد نظر ، اطلاعات در پایگاه داده ، می سازد.
- غذایی که سفارش داده اید View است.
در الگوی معماری MVC لایه نما (View) تنها میداند که چه طور باید رابط کاربری را نمایش دهد. اگر برای نمایش رابط کاربری نیاز به هر نوع دادهای باشد، لایه View آن را از لایه مدل دریافت خواهد کرد. اما نما مستقیماً از مدل برای پیدا کردن دادهها سوال نخواهد کرد؛ لایه نما این کار را از طریق لایه Controller (لایه کنترلگر) انجام میدهد.
بنابراین، Controller برای بدست آوردن دادههای مورد نیاز نما، مدل را فراخوانی میکند. وقتی دادهها آماده شدند، Controller لایه نما را از حاضر بودن دادهها با خبر میکند. اکنون، لایه نما میتواند دادهها را از مدل دریافت کند. این جریان انتقال داده را میتوان به صورت زیر به تصویر کشید.
دلیل استفاده از الگوی MVC چیست؟
- تکرار را از بین میبرد.
- به ایجاد یک ساختار یکدست و استوار در اپلیکیشن کمک میکند.
مثال دیگری میزنم. فرض کنید فردی به خیاطی میرود. لباس های قابل سفارش ، کت ، شلوار ، بلوز است. فرد یا همان کاربر درخواست خود را که شلوار ، نما یا view ، است را به صندوق دار ، کنترلر، میدهد. صندوق دار سفارش را به اتاق کار ، مدل ، میدهد . اتاق کار، با ابزاری که دارد، دیتا ها ، شلوار را اماده م کند.
اتاق کار، مدل ، شلوار را به صندوق دار، کنترل ، تحویل می دهد. صندوق دار نیز شلوار، نما یا view ، را به کاربر تحویل می دهد.
در مثال فوق ، صندوق دار یا همان کنترلر، انواع لباس ها را می شناسد و از ترکیب انها مطلع است.تمام سفارش و اطلاعات را جمع اوری می کند تا سفارش را برای ساخت ارسال کند.
لایه مدل یا اتاق کار می داند که چه موادی برای درست کردن شلوار مشکی نیاز است. شلوار مشکی یا view همان چیزیست که کاربر نیاز دارد..
فریم ورک MVC چیست؟
به فریمورک یا چارچوب توسعه نرمافزاری که از الگوی معماری MVC تبعیت کند، یک فریمورک MVC گفته میشود. اگرچه، خود الگوی معماری MVC را نیز میتوان به عنوان یک چارچوب یا فریمورک در نظر گرفت.
- Controller: کنترلگر درخواستهای ورودی را مدیریت میکند. در یک فریمورک وب، این کار میتواند به صورت تعریف آدرسهای اینترنتی یا همان URLهای خاصی باشد که درخواست کاربر را به یک قابلیت مشخص نگاشت میکند.
- مدل: در واقع همان چیزی است که دادهها در بکاند به نظر میرسند.
- نما: همان قالب HTML است که پس از رسیدگی به درخواست کاربر بازگردانده میشود.
ویژگی های الگوی معماری MVC
- آزمایشپذیری ساده و بدون دردسر؛ یک فریمورک قابل آزمایش، گسترشپذیر و قابل شخصیسازی به میزان زیاد.
- امکان مدیریت و کنترل کامل روی HTML و همچنین URLها در الگوی معماری MVC
- بهرهمندی از ویژگیهای موجود در Django ،JSP ،ASP.NET و سایر موارد در MVC
- تفکیک بسیار واضح منطق وظایف اپلیکیشن به صورت مدل، نما و Controller در الگوی معماری MVC
- مسیریابی URL برای URLهای سازگار با سئو (SEO) و نگاشت URL قدرتمند برای URLهای قابل درک و قابل جستجو
- پشتیبانی از توسعه آزمونمحور (Test Driven Development | TDD)
همانطور که بیان شد، سه جزء الگوی معماری MVC به شرح زیر است.
- مدل (Model): این لایه شامل تمام دادهها و منطق مرتبط با آن دادهها است.
- نما (View): دادهها را به کاربر نمایش و ارائه میدهد یا در واقع تعاملات کاربر را مدیریت میکند.
- کنترلگر (Controller): یک رابط میان قطعات مدل و نما به حساب میآید.
مدل (Model) در MVC چیست ؟
مدل به عنوان پایینترین سطح در ساختار معماری برنامه کاربردی شناخته میشود. این مسئله، به این معنا است که لایه مدل مسئولیت نگهداری و مدیریت منطقی دادهها را بر عهده دارد.
مدل در واقع به پایگاهداده متصل است. بنابراین، هر کاری که با دادهها انجام میشود، از قبیل افزودن یا دریافت دادهها در بخش مدل انجام میشود. قطعه یا لایه مدل، دادهها و منطق مربوط به آنها را ذخیرهسازی میکند. مدل به درخواستهای Controller پاسخ میدهد. زیرا Controller هیچگاه به طور مستقیم و به خودی خود با پایگاهداده در ارتباط نیست. مدل با پایگاهداده مکاتبه میکند و سپس دادههای مورد نیاز را به Controller انتقال میدهد. همچنین، مدل هیچ وقت به صورت مستقیم با لایه نما ارتباط ندارد.
لایه نما (View)
بازنمایی داده به وسیله قطعه یا لایه نما (View) انجام میشود. نما در واقع برای کاربر یک رابط کاربری یا UI تولید میکند. بنابراین، در خصوص کاربردهای وب، میتوان قطعه نما را همان بخش HTML و CSS در نظر گرفت.
Controller (کنترلگر)
Controller نقش اصلی را ایفا میکند. زیرا Controller بخشی است که امکان ارتباط دو طرفه میان مدل و نما را به وجود میآورد. بنابراین، Controller نقش یک میانجی را دارد.
Controller نیازی به دخالت در مدیریت منطق دادهها ندارد و فقط آنچه باید انجام شود را به مدل انتقال میدهد. پس از دریافت دادهها از مدل، Controller آنها را پردازش میکند و سپس تمام آن اطلاعات را برداشته و به نما ارسال میکند و نحوه نمایش آنها را به نما توضیح میدهد. باید توجه داشت که نما و مدل مستقیماً امکان مکاتبه و ارتباط ندارند.