الگوی معماری مدل، نما و کنترلکننده (MVC) چیست و چه کاربردی در دنیای نرمافزار دارد؟
تعامل با کاربران باعث شده تا صفحات وب امروزی شباهت کمی به صفحاتی داشته باشند که ده یا بیست سال گذشته شاهد آنها بودهایم. آمارها نشان میدهند که صفحات وبی که به شکل ایستا بارگذاری میشوند دیگر آن کارایی سابق را ندارند، زیرا خبری از پویایی در ارتباط با آنها نیست.
به گزارش شبکه مگ به همین دلیل است که کسبوکارها در زمان سفارش ساخت یک صفحه وب اولین نکتهای که به آن دقت میکنند پویایی صفحه است. الگوها و معماریهای مختلفی برای دستیابی به یک چنین قابلیتی در دسترس است که الگوی معماریMVC یکی از آنها است. MVC یک الگوی معماری است که یک برنامه را به سه بخش مدل(Model)، نما(View) و کنترلکننده(Controller) تقسیم میکند. هر یک از مولفههای این معماری، برای مدیریت بخش خاصی از توسعه برنامههای کاربردی در نظر گرفته شدهاند. مهمترین عاملی که باعث شده الگوی معماریMVC به شکل جدی مورد توجه تیمهای توسعهدهنده قرار بگیرد این است که لایه منطق کسبوکار لایه نمایش را از هم جدا میکند.
الگوی معماری مدلنمای کنترلکننده(MVC) چیست؟
الگوی معماریMVC راهکاری ساخت یافته برای توسعه و ساخت برنامههای کاربردی است که متشکل از رابط کاربری هستند. در سالهای دور از معماری فوق عمدتا در ارتباط با رابطهای کاربری گرافیکی مورد استفاده در برنامههای دسکتاپ استفاده میشود، با اینحال امروزه الگوی فوق در ارتباط با طراحی برنامههای کاربردی وبمحور و موبایل نیز استفاده میشود. الگوی معماریMVC سرنامModel-View-Controller است که در آن مدل، نما و کنترلکننده مولفههایالگوی فوق را تشکیل میدهند. به بیان دیگر، معماریMVC یک پارادایم نرمافزاری است که برنامه را به سه بخش تقسیم میکند. درست است که معماری فوق در ارتباط با توسعه برنامههایی برای پلتفرمهایی نظیر اندروید خیلی محبوب نیست، اما الگوی معماری فوق باعث شده تا معماریهایی نظیرMVP وMVVM مورد توجه توسعهدهندگان قرار گیرد. برای آنکه دید اولیه در ارتباط باMVC به دست آورید، بهتر است شرح کوتاهی در ارتباط با مفهوم الگوی معماری ارائه کنیم.
الگوی معماری یک اسکیما (طرح) و ساختاری برای سیستمهای نرمافزاری ارائه میکند. الگوی معماری مجموعهای از سامانههای از پیش تعریف شده، وظایف، قواعد و خطدهیهایی است که برای سازماندهی ارتباط میان عناصر مختلف استفاده میشود. بر همین اساس الگوی معماری را میتوان مفهومی توصیف کرد که برخی از عناصر منسجم و اساسی در یک معماری نرمافزاری را ترسیم میکند. درست است که الگوی معماری راهحلی کلی با رویکرد قابلیت استفاده مجدد برای یک مسوله فرموله شده در ارتباط با معماری نرمافزار است.
در معماری فوقController: کنترلکننده درخواستهای ورودی را مدیریت میکند. در یک چهارچوب وب، اینکار میتواند با هدف تعریف آدرسدهی اینترنتی باشد که درخواست کاربر را به یک ویژگی مشخص ترسیم میکنند. کنترلکننده بخشی است که امکان ارتباط دو طرفه میان نما و مدل را ایجاد میکند. یک نما از طریق کنترلکننده درخواست اطلاعات میکند و در ادامه خروجی را به کاربر نشان میدهد. علاوه بر این، نما دادههای مربوط به محاورهها، نمودارها و جداول را بازنمایی میکند.
در معماری فوقModel: این لایه تمامی دادهها و منطبق مرتبط با دادهها را توصیف میکند. مدل پایینترین سطح در ساختار معماری برنامه کاربردی است. به این معنا که لایه مدل مسئولیت نگهداری و مدیریت منطقی دادهها را بر عهده دارد. مدل به بانکاطلاعاتی متصل میشود، بنابراین هر تعاملی که با دادهها انجام میشود نظیر اضافه کردن یا دریافت دادهها در بخش مدل انجام میشود.
در معماری فوقView: نما همان قالبHTML است که پس از رسیدگی به درخواست کاربر بازگردانده میشود. به بیان دقیقتر، دادهها را به کاربر نمایش میدهد و امکان تعامل کاربر با برنامه کاربردی را فراهم میکند. بازنمایی دادهها به وسیله لایه نما انجام میشود. نما در اصل برای کاربر یک رابط کاربری ایجاد میکند. بنابراین، در ارتباط با کاربردهای وب، میتوان مولفه نما را همان بخشHTML وCSS توصیف کرد. نماها به وسیله دادهها ایجاد میشوند و دادهها توسط مولفه مدل گردآوری میشوند.
الگوی معماریMVC چیست؟
در الگویMVC لایه نما تنها در ارتباط با رابط کاربری است. اگر برای نمایش رابط کاری به دادههایی نیاز باشد، لایه نما آنرا از لایه مدل دریافت میکند. با اینحال، لایه نما بهطور مستقیم محاورهای را برای مدل به منظور واکشی دادهها ارسال نمیکند. لایه نما اینکار را از طریق لایه کنترلکننده انجام میدهد. در این حالت کنترلکننده برای بهدست آوردن دادههای موردنیاز نما، مدل را فراخوانی میکند. زمانیکه دادهها آماده شدند، کنترلکننده پیامی برای لایه نما ارسال میکند که دلالت بر دریافت دادهها دارد. همانگونه که ممکن است حدس زده باشید، لایه کنترلکننده نقش یک واسط را برای دریافت دادهها بازی میکند. لایه نما به دو شکل از دسترسپذیری دادهها اطلاع پیدا میکند. روش اول از طریق کنترلکننده استکه به نامMVC انفعالی از آن نام برده میشود. روش دوم از طریق فیلتر کردن دادهها در مدل به وسیله ثبت و نسبت دادهها دادهها است که روش دوم بهنامMVC فعال شناخته میشود.
چرا باید از الگویMVC استفاده کنیم؟
از مهمترین دلایلی که باعث میشود از الگویMVC استفاده کنیم باید به حذف تکرار و ساحت یکنواخت و منسجم برنامههای کاربردی اشاره کرد. برای آنکه باMVC به خوبی آشنا شوید، اجازه دهید به ذکر مثال سادهای بپردازیم. فرض کنید به یک ساندویچ فروشی میروید. در اولین گام به منویی که روی میز یا به دیوار نصب شده است نگاهی میکنید. در ادامه تصمیم میگیرد تا یک همبرگر سفارش دهید. اکنون سفارش خود را به صاحب مغازه یا صندوقدار اعلام میکنید. پس از انجام این سفارش، فروشنده میداند که مشتری به دنبال چه چیزی است و شروع به تهیه کردن ساندویچ میکند و آنرا مطابق با سفارش مشتری آماده میکند. با توجه به اینکه مواد اولیه ساندویچ از قبل در دسترس قرار دارند، سفارشی مشتری در زمان کوتاهی آماده شده و در اختیارش قرار میگیرند. همانگونه که مشاهده میکنید در مثال فوق، سه شی مجزا و تفکیکشده از یکدیگر وجود داشتند که برآیندی از الگوی معماریMVC هستند.
در مثال فوق محل درست کردن ساندویچ (مدل) در دنیای نرمافزار است. ساندویچی که آماده و به مشتری تحویل داده شده در نقش نما است و فروشنده نقش کنترلکننده را بر عهده دارد.
زمانی که مشترین ساندویچش را سفارش میدهد، ایده تصویر دقیقی از محصول نهایی را مدنظر دارد که یک ساندویچ همبرگر است. این مسئله درست، همانند حالتی است که کاربری به بازدید از سایتی میپردازد. بهطور مثال، در توییتر با فشار دکمه دنبالکنندگان فهرستی از افرادی که دنبالکردهاید یا دنبالکننده شما هستند را مشاهده میکنید. بنابراین، کاربر انتظار دارد با انتخاب گزینه دنبالکنندگان، فهرستی از کاربران را مشاهده کند. زمانیکه کاربر دکمه دنبالکنندگان را انتخاب میکند درخواستی برای سرورهای توییتر ارسال میکند. این درخواست برای خدمتدهدی و نمایش فهرست دنبالکنندگان ارسال میشود. درست مثال با زمانی که مشتری سفارشی خود را به فروشندهای که نقش کنترلکننده را دارد اعلام میکند. در ادامه، درخواست کاربر به سرورهای توییتر میرسد. درخواست به کنترلکننده تحویل داده شده و کنترلکننده سرور درخواست را پردازش میکند. در ادامه کنترلکننده سرور تمام دنبالکنندگان را از بانک اطلاعاتی استخراج میکند، درست همانند زمانی که فرشونده ساندویچ (مدل) مواد اولیه را انتخاب میکند. این مننابع (دادههای فهرست دنبالکنندگان) در قالب یک پاسخ جمعآوری میشوند. رویکرد فوق مشابع زمانی است که فروشنده ساندویچ تمام مواد اولیه را با هم ادغام میکند و داخل ساندویچ (نما) قرار میدهد. در انتها، فهرست دنبالکنندگان به کاربر نشان داده میشود، مشابه حالتی که فروشنده ساندویچ آماده شده را به مشتری تحویل میدهد.
ویژگیهای مهم الگوی معماریMVC
از مهمترین ویژگیهای معماری فوق به موارد زیر میتوان اشاره کرد:
- آزمایشپذیری ساده و کم دردسر
- مدیریت و کنترل کامل رویHTML و آدرسهای اینترنتی در حوزه وب
- بهکارگیری هوشمندانه ویژگیرهای موجود درASP.NE،JSP،Django و سایر موارد مرتبط باMVC
- مسیریابی آدرس اینترنتی برای آدرسرهای اینترنتی سازگار با سئو و ترسیم آدرسهای اینترنتی قدرتمند که قابلیت جستوجوها را افزایش میردهند.
- تفکیک واضح منطق وظایف برنامه کاربردی در قالب مدل، نما و کنترلکننده
- پشتیبانی از توسعه آزمونمحور(Test Driven Development)
از مهمترین چهارچوبهای مبتنی برMVC میتوان به Ruby On Rails،Django،CakePHP،Yii،CherryPy،Spring MVC،Catalyst،Rails،Zend Framework،CodeIngniter،Laravek،Fule PHP و سیمفونی اشاره کرد.