معماری MVC

الگوی ساختاری ام‌وی‌سی به جداسازی داده‌های کاربرد از جملهٔ محتویات بخش مدل از مؤلفه‌های ارائه شده به‌صورت گرافیکی بخش نما و منطق مربوط به پردازش ورودی‌ها بخش کنترل‌گر اقدام می‌نماید.
هدف الگوی ساختاری ام‌وی‌سی صرفاً یکپارچگی در ساختار نرم‌افزار است و به کمک آن بدست‌گیری نرم‌افزار در راستای مدیریت و گسترش به سادگی انجام می‌گیرد.
تولید کنندگان نرم افزار نیز تلاش می کنند تا نرم افزاری تولید کنند تا بتواند اکثر نیاز های متقاضیان را به بهترین نحو ممکن تامین کند ودر همین راستا در تلاش هستند که روند تولید نرم افزار را به سمتی بکشانند که ساختار استاندارد و تائید شده ای داشته باشد. شاید بتوان گفت که دوران کد نویسی به پایان رسیده و همه چیز به سمت زیر ساخت ها و بنیان نهادن چارچوب های استاندارد وپیروی از آن ها در امر تولید بهتر نرم افزار در حرکت است.
معماری mvc از یک رویکرد سه لایه تبعیت می کند. هر بخش از معماری mvc دارای ویژگی های خاصی بوده و وظایف ویژه ای را به صورت مجزا بر عهده دارد.
فرض کنید در شرکتی نرم افزاری نوشته شده است و این نرم افزار قرار است میزان سود و زیان شرکت را در سال های متفاوت بررسی نماید و در نهایت خروجی بر اساس رقم به شما عرضه کند. حال بعد از گذر چند سال مدیر شرکت از شما می خواهد نوع نمایش به صورت نموداری تغییر کند و یا فرمت های خاصی برای خروجی در نظر گرفته شود. در چنین شرایطی اگر معماری Mvc نباشد در واقع می بایست یک برنامه جدید نوشته شود.
اگر توجه نمایید ویژگی مهم برای یک نرم افزار تغییر پذیر بودن آن است. اگر تمامی فرآیندها در یک فرم نوشته و پیاده سازی شود قطعا برای تغییر دیگر نمی توان گام درستی ایجاد نمود و دست برنامه نویس بسته خواهد بود. به این ترتیب طراحی معماری سه لایه ضرورت خواهد داشت. این معماری خاصیت توسعه بسیار عجیبی دارد و شاید به اندازه معماری ساختمان مهم باشد. الگوهای طراحی باید به درستی انتخاب شود و این موضوع در نهایت به یک پروژه بسیار عالی منجر خواهد شد.
برای طراحی الگو های معماری Mvc باید به یک سری شاخص ها توجه ویژه ای شود. در ابتدا نگهداری از سیستم از اهمیت ویژه ای برخودار است، در واقع طراحی سیستم باید به صورتی باشد که گروه توسعه دهنده بتوانند در مدت زمان کوتاه خطاها را رفع نمایند. قابلیت استفاده مجدد از دیگر مسایلی است که باید در نظر گرفته شود. یک الگوی خوب باید بتواند در زمان طولانی نیز قابلیت توسعه داشته باشد، این قابلیت نباید به سایر بخش های نرم افزار آسیب وارد نماید. بازدهی سیستم از دیگر مسایل مهم در طراحی الگوها است. بازدهی سیستم ارتباط بسیار مستقیمی با چهارچوب کاری و همینطور پلتفرم ها دارد. یک الگوی صحیح در واقع تقسیم درست و یک رابطه ایده آل فراهم خواهد ساخت. رابطه منطقی بین هر جزء سبب بهبود بازدهی سیستم می شود.


فرض کنیم که از mvc برای طراحی یک سایت می خواهیم استفاده کنیم:


MODEL وظیفه کار با پایگاه داده را بر عهده دارد: یک سایت دیتابیس دارد، در معماری mvc یک سایت علاوه بر دیتابیس نیاز به یک سری مدل (کلاس) دارد که می تواند دقیقا مطابق با دیتابیس شما باشد و اطلاعات از دیتابیس به مدل میاید.
در واقع بار اصلی معماری MVC بر عهده این بخش است . این بخش می تواند با داده ها در ارتباط باشد .الزاماً منظور از داده حتما ارتباط با پایگاه های داده همچون MSSQL و Access و ... نیست ، حتی منبع داده ها در بخش Model می تواند یک آرایه از اعداد و یا هر چیز دیگری باشد . همچنین Model وظیفه چک کردن داده ها جهت صحت درستی داده ها را هم بر عهده دارد .
Model شامل سه بخش اصلی میباشد :
 Data Model : هر نرم افزاری که با بانک اطلاعاتی تعامل دارد
 :Business Model : برای بکارگیری Data Model و ذخیره اطلاعات در بانک اطلاعاتی میباشد .
 اطلاعات را از سمت controller به سمت view ارسال میکند .

VIEW وظیفه ارتباط با کاربر نهایی را بر عهده دارد: یک سایت یک سری صفحات دارد که همان view ها در این معماری است.
این بخش که در واقع همان بخش Presentation Layer در معماری 3 لایه میباشد وظیفه بر قراری ارتباط با کاربر نهایی و گرفتن داده از کاربر و نمایش داده های اماده با کاربراز طریق برقراری ارتباط با دو بخش دیگر یعنی Model و controller است . در واقع نکته مهمی که در بخش View باید مد نظر داشت این است که این لایه مسئول کنترل صحت داده های وارد شده از طریق کاربر و همچنین مسئول صحت داده های نشان داده شده به کاربر نیست . در واقع این بخش با داده های خام کار میکند . یک مثال ساده خیلی از برنامه نویسان هنگامی که در فرم Login برنامه ،کاربر کلمه عبور خود را وارد میکند ، در همان فرم Login اقدام به چک کردن پسورد مبنی بر صحت آن و ... می کنند . که این عمل در معماری MVC قابل قبول نیست . در واقع برای حل مسئله فوق در معماری MVC در فرم Login هنگامی که کاربر کلمه عبور را وارد کرد و دکمه Login یا ورود را زد ، کلمه عبور داده شده بدون هیچ گونه اعمالی اعم از Encrypt کردن و ... به بخش های دیگر فرستاده میشود و فقط یک نتیجه ساده مبنی بر این که کاربر اجازه ورود دارد یا خیر را از بخش های دیگر دریافت میکند که بر اساس آن اجازه ورود کاربر به برنامه داده میشود .
این بخش نیز شامل دو قسمت میباشد :
_ ASPX View Engine
_ Razor View Engine

Control وظیفه کنترل View و Model و نحوه ارتباط آن دو را با هم بر عهده دارد: یک سایت منطقی دارد که در آن می گوید که مثلا در صفحه اصلی ۱۰ تا از آخرین پست ها را بر اساس تاریخ انتشار آنها نمایش بده، این منطق در کنترلر (controller) نوشته می شود. در کنترلر اطلاعات را مطابق با مدل (model) از دیتابیس گرفته می شود و برای view فرستاده می شود بنابر این در این الگو منطق برنامه کاملا از view جدا می شود و این امر سبب می شود که کار توسعه پروژه بسیار آسان تر شو د.
این بخش همانطور که از اسم آن مشخص است یک بخش کنترل کننده می باشد ، و در واقع واسطی بین دو بخش Model و View میباشد. حال ببینیم روند اجرای برنامه در معماری MVC به چه نحوی خواهد بود . در معماری MVC روند کلی برنامه (جزئیات را در ادامه خواهید دید) به این شکل است که کاربر تقاضای خود را از طریق واسط های برنامه نویسی (نظیر Form ها و User Control ها و .. ) از برنامه (از بخش View)درخواست می کند . بخش View در خواست ها را به بخش Controller فرستاده و این بخش با برقراری ارتباط با بخش Model در خواست های کاربر را پردازش کرده و پس از پایان پردازش زمانی که خروجی درخواست داده شده آماده گردید بخش Controller بخش View را آگاه می سازد تا خود را بر اسا س تغییرات جدید که اصطلاحاً در معماری MVC به آن حال Model می گویند ، به روز سازد . در واقع چیزی که باعث میشود تا بخش Controller به بخش View اطلاع دهد که باید حالت جدید model را دریافت کند و خود را Update کند این است که بخش View باید قبلا خودش را در بخش Model اصطلاحا Register کرده باشد که البته عمل Register کردن توسط بخش Controller انجام میگیرد . نحوه register کردن بخش View به معماری آن محیط و همچنین زبانی که توسط آن برنامه را گسترش میدهید و همچنین قابلیت های آن زبان بستگی دارد.

مزیت های استفاده از معماری mvc

اگر تا امروز نمی دانستید که mvc چیست پس احتمالا متوجه دلایل برتری mvc نمی شوید این امری عادی است پس به طرف شروع کار با mvc بروید و مطمئن باشید که مزیت های زیادی دارد. (آموزش asp mvc در پایین صفحه)
بعد از کمی تجربه اگر کنجکاو بودید برگردید و مزیت های mvc را بخوانید.
مزیت های معماری یا الگو mvc:
1.     استفاده دوباره از کد که در مهندسی نرم افزار بسیار مهم است، به دلیل جدا بودن این سه قسمت از هم این قابلیت به خوبی در این معماری قابل لمس است.
2.    همان طور که در بالا توضیح داده شد ، به سادگی می توان چندین interface داشت. یعنی شما می توانید چندین view مختلف داشته باشید و به سادگی از آنها استفاده کنید.
3.    کسی که ui کار است می تواند کاملا به ظاهر و ui توجه کند و به مسائل منطق یا باگ های برنامه کاری نداشته باشد.
4.    کسانی که کار منطق برنامه را پیدا می کنند می توانند فقط به کار خود توجه داشته باشند و به ظاهر صفحه ها کاری نداشته باشند.
5.    بنابر این کار تیمی بروی یک پروژه به خوبی با mvc انجام می شود.
6.    به دلیل جدا بودن view از model به سادگی می توان view اضافه کرد بدون این که model تغییری کند.
معایب استفاده از mvc و کمک به mvc
اولین بار درک mvc و کار کردن با آن سخت است و بدون ام وی سی پروژه های کوچک سریع تر و راحتر بالا می آیند ولی اگر پروژه نیاز به کار تیمی داشته باشد و توسعه آینده آن مهم باشد دیگر استفاده نکردن از mvc غیر عقلانی است و گران تمام می شود.

فریم ورک هایی که بر پایه mvc هستند:


اگر جواب mvc چیست را یافتید نوبت به آموزش mvc  برای یکی از framework های محبوب است. در زیر فریم ورک هایی که بر پایه mvc هستند برای زبان های برنامه نویسی مختلف نام می برم و شما در این میان نام فریم ورک هایی را می بینید که بسیار این روز ها معروف شده اند و افراد قوی آنها را پیشنهاد می کنند که این خود دلیل دیگری برای اثبات خوب بودن mvc است.
1.    asp.net دیگر کنار رفته است و asp.net mvc آمده است که در آن با معماری mvc کد c# می زنید و از توسعه وب لذت می برید. رسانه آموزشی لیموناد، ورزش سه و … از تکنولوژی asp mvc بهره برده اند. ( دوره آموزش asp.net mvc )
2.    php به دلیل متن باز بودن فریم ورک های mvc زیادی دارد که در زیر نام می برم که درحال حاظر لاراول محبوب ترین فریم ورک php است.
1.    laravel (دوره جامع آموزش لاراول) (مقاله لاراول چیست)
2.    CodeIgniter
3.    CakePHP
4.    Zend
5.    Yii
3.    python هم فریم ورک معروفی برای کد نویسی در وب دارد که از معماری mvc استفاده می شود.  django و Pyramid دو  فریم ورک محبوب پایتون mvc هستند. (در لینک آموزش پایتون ببینید.)
4.    برنامه نویسی روبی که همه نام آن را با rails شنیده اند. جالب است بدانید که rails یک framework بر پایه mvc است. اگر با ruby on rails اشنا نیستید در این مقاله حتما با آن اشنا شوید تا بدانید تویتر و soundcloud و git hob و بسیار از  سایت های خوب و مدرن از ruby on rails  بهره برده اند.  (مقاله: ruby on rails چیست)
5.    انگولار جی اس (angularjs) یکی از فریمورک های  جاوا اسکریپت  است که توسط  گوگل توسعه داده شده است . برنامه های تک صفحه ای نیاز دارند تا بدون رفرش شدن مدام با سرور ارتباط برقرار کنند، این فریمورک برای پیاده سازی چنین برنامه هایی بسیار مفید است. فریمورک     AngularJS بخوبی معماری MVC را در سطح client پیاده سازی می کند ، که باعث ساده تر شدن توسعه و خطایابی برنامه های تحت وب می شود