MVC چیست و دلیل استفاده از MVC چیست ؟

MVC چیست؟

mvc مخفف کلمات  Model View Controller  هست . در واقع  MVC یک الگوی طراحی  (design pattern)  جهت جداسازی قسمت های مختلف برنامه است. هر یک از بخش های معماری  MVC  یعنی Model  و View و controller را به شکل زیر تعریف می کنیم.

مدل (Model)

مدل لایه ای است که داده ها را برای برنامه نگه می دارد. لایه وظیفه ذخیره و بازیابی داده ها از پایگاه داده را بر عهده دارد و همچنین وظیفه اعتبارسنجی داده ها را بر عهده دارد.

به عنوان مثال ، اگر می خواهید یک کاربر جدید ایجاد کنید، باید یک مدل کاربری جدید ایجاد کنید و آن را در پایگاه داده ذخیره کنید

لایه نما (View)

این لایه ای است که برای ارائه برنامه استفاده می شود. برای نمایش داده ها به کاربر نهایی استفاده می شود.

برای مثال ، اگر می خواهید یک نمای کاربری ایجاد کنید ، باید مؤلفه های رابط کاربری ایجاد کنید که کاربر با آن ها تعامل داشته باشد ، مانند یک فرم ورود به سیستم در قالبی قابل فهم.

 

 کنترل‌گر(Controller)

کنترلر لایه منطقی برنامه است. مسئولیت رسیدگی به درخواست کاربر و ایجاد پاسخ را بر عهده دارد. این بخش ویو و مدل را به هم پیوند می دهد.

به عنوان مثال ، کنترلر مسئول اعتبار سنجی ورودی کاربر خواهد بود و سپس ورودی کاربر را به مدل ارسال می کند تا کاربر را ذخیره کند.

 

معماری MVC چگونه کار می کند ؟

 

mvcImage

 

کنترلر درخواست برنامه را دریافت می کند و آن را برای ارسال و دریافت داده به مدل ارسال می کند.

سپس View از داده های کنترل کننده برای تولید اطلاعات قابل نمایش برای کاربر نهایی استفاده می کند. ارائه فقط به نحوه ارائه اطلاعات مربوط می شود ، نه ارائه نهایی. بنابراین این فایل Html است که اطلاعات کنترلر را نمایش می دهد.

سپس view نمای نهایی خود را برای کنترلر می فرستد و سپس کنترلر پاسخ را به مرورگر می فرستد که سپس پاسخ را به کاربر نهایی نمایش می دهد.

توجه داشته باشید. مدل ها ، نماها و سایر اجزاء در یک برنامه در حال اجرا با استفاده از کنترلرها با یکدیگر ارتباط برقرار می کنند.

 

مثالی برای درک بهتر الگوی معماری MVC

رستوران:

فرض کنید یک رستوران داریم، این رستوران شامل یک فضا برای نشستن است که مشتری ها میان و اونجا روی صندلی ها میشینند، یک آشپزخانه دارد که غذاها رو آماده میکنند و تعداد گارسون و راهرو، که ارتباط بین آشپزخانه و مشتری ها رو فراهم میکنند.

ما می تونیم بگیم این رستوران از MVC استفاده می کند جایی که مشتری ها هستند می شود بخش Views، گارسون ها هم Controllers و آشپزخانه هم Model است.

حالا تو این مدل، مشتری ها از لایه Views درخواست ها را به گارسون که لایه Controllers است میدهند و گارسون درخواست رو تحلیل میکند و این درخواست را به آشپزخانه که لایه Model است ارسال می کند. لایه Model غذا را آماده میکند و دوباره به گارسون که لایه Controllers است تحویل میدهد و گارسون پاسخ درخواست که اینجا غذاست رو به لایه Views که همان مشتری است میبرد.

 

فریم ورک های وب محبوب مبتنی بر MVC

 فهرستی از فریم‌ورک‌های محبوب توسعه وب که از الگوی معماری MVC استفاده می‌کنند:

  • Ruby on Rails

  • Django

  • CakePHP

  • Yii

  • CherryPy

  • Spring MVC

  • Catalyst

  • Rails

  • Zend Framework

  • CodeIgniter

  • Laravel

  • Fuel PHP

  • Symphony

  • Asp.net mvc

 

مزایای استفاده از MVC

۱- توسعه و تغییرات به شدت ساده و آسان می شود چون دیگه تو کدها گم نمی شوید و انگار کدها دسته بندی یا قفسه بندی شده اند و نیاز نیست دنبال چیزی بگردید.

۲-  شما میتونید داده ها رو در هرلایه تست کنید و اگر درست بود برای لایه بعد ارسال کنید، یعنی دیباگ کردن کدها خیلی خیلی راحت‌ تر می شود.

۳-  مهمترین  مزیت  مطمئنا بحث امنیت نرم افزارهای تولید شده است. چون کدهای حساس در لایه های متفاوت هستند امنیت رو بسیار بالاتر میبرد مثلا فقط در لایه Model امکان دسترسی به دیتابیس وجود دارد.

۴-  می توانید چند View رو به یک Controller وصل کنید یا برعکس و راحت می توانید viewهای جدید ایجاد کنید بدون اینکه دوباره کدهای بک اند رو بنویسید

۵-  وقتی درخواستی می خواهد بین هرکدوم از لایه ها جابجا شود می توانید یک سری عملیات روی آن درخواست انجام دهید مثلا چک کنید که کسی که درخواست رو فرستاده، آیا اجازه ارسال این درخواست رو دارد یا نه و …، که برای سطح بندی کاربران و مجوزهای مختلف برای امنیت خیلی کاربردی و مهمه است.

۶- کار تیمی راحت و جذاب می شود مثلا اگه من فرانت اند کار باشم فقط روی لایه Views کار می کنم و اصلا کدهای بک اند رو نمی بینم.

۷-  سرعت کدنویسی در این معماری بسیار بالا می باشد.

۸- سازگاری این معماری با اصول سئو بسیار بهتر است.

 

معایب  استفاده از MVC

  • سختی درک معماری : این موضوع، میتونه برای برنامه‌نویس‌های تازه‌کارتر، کمی مشکل‌ساز باشه. توصیه می‌کنم قبل از این که لقمه بزرگ بردارید و سراغ ریلز، جنگو یا لاراول برید حتما اول با سیناترا، فلاسک یا لومن کار کنید. به این شکل فرمورک‌ها میتونن براتون به شدت قابل درک‌تر بشن.

  • خارج شدن شکل نرم‌افزار از کنترل توسعه‌دهنده‌(ها) : این مورد کمی پیچیده‌ست. فقط بذارید به این شکل بهتون بگم که شما مثلا یه سری واژه رو نمی‌دونید چطور مدیریت کنید. مثلا ممکنه اسم مدل مربوط به حساب بانکی رو Hesab, Bank یا Bank Account بذارید و نفر بعدی که روی کد شما کار می‌کنه، با این قضیه به مشکل بخوره. بهترین راه اینه که این موارد، قبل از پیاده‌سازی کشف و مستند بشن.

  • انعطاف پایین : طبیعیه که وقتی یک جعبه‌ابزار کامل دم دستتون باشه، دیگه سراغ ساخت ابزار نمی‌رید. اکثر فرمورک‌های MVC هم این مشکل رو دارند و اگر شما بخواهید بخشی هم خودتون پیاده کنید، به شدت به مشکل می‌خورید.

  • پرفرمنس‌تایم پایین : خب از اونجایی که اکثر این فرمورک‌ها، دارن همه چیز رو خودشون هندل می‌کنن، ممکنه هزینه بالایی برای اجرا داشته باشند. البته این هزینه ممکنه با توجه به سخت‌افزارهای امروزی زیاد هم بالا حساب نشه، اما چرا وقتی میشه با کمترین هزینه کاری کرد، هزینه رو بی‌خود و بی‌جهت ببریم بالا؟

  • رفع اشکال پرهزینه : درسته که فرایند کشف و رفع باگ رو گفتیم که آسونه، اما هزینه بالایی داره. حواسمون باید به این موضوع باشه که داریم با چیزی کار می‌کنیم که همه چیش به همه چیش ربط داره و قطع این ارتباط میتونه هزینه زیادی وارد کنه بهمون.

  • بزرگ شدن غیرقابل کنترل پروژه : خب وقتی که MVC کار می‌کنیم، عموما خیلی کم پیش میاد که بخواهیم موجودیت‌ها رو به صورت سرویس‌های مجزا توسعه بدیم. در واقع اینجا خبری از میکروسرویس و اینا نیست! همین باعث میشه بیزنس از یک حدی که بزرگتر بشه، کنترلش به شدت سخت شه. از همین رو، معمولا در کنار MVC یک معماری دیگری مثل rest هم استفاده میشه که این داستان‌ها رو نداشته باشیم.