در طراحی نرم‌افزار، یکی از الگوهای معماری نرم افزار مدل-نما-کنترلر یا(Model–view–controller - MVC) است، الگوی ساختاری mvc به جداسازی داده‌های ابزار کاربردی [Application] (از جملهٔ بخش مدل[Model]) از مؤلفه‌های ارائه شده به‌صورت گرافیکی (View) و منطق مربوط به پردازش ورودی‌ها (Controller) اقدام می‌نماید.

  • وظیفه view نمایش اطلاعات درون مدل به کاربر و انتقال فرامین کاربر به کنترلر است.
  • وظیفه controller ارتباط با سایر لایه ها ( برای مثال business logic) و بروز رسانی model است.
  • وظیفه model حمل داده ها و اطلاع رسانی به view در صورت اعمال تغییر در model توسط controller است.
    البته در پیاده سازی های مختلف از الگوی طراحی MVC ممکن است وظایف هر قسمت کمی متغییر باشد. برای مثال در بعضی از پیاده سازی ها، انتقال فرامین کاربر به کنترلر بر عهده model است.

هدف mvc -با جداسازی مدل و نما- کاهش پیچیدگی طراحی الگوریتم و افزایش نرمی و نگهداشت‌پذیری کد مبدأ است. همچنین ام‌وی‌سی برای ساده‌سازی طراحی سیستم‌های خودرای و خودمدیریتی استفاده می‌شود.

مانند بقیه ی معماری نرم افزارها MVC راه حل اصلی یک مشکل است در حالی که می‌تواند خود را با هر سیستمی وفق دهد. معماری MVC با یک شرح سنتی به صورت زیر است: اجزا: مدل :قسمت اصلی و مرکزی است که رفتار اپلیکیشن را در قالب problem domain (مشکل دامنه) اظهار می‌کند و از واسط کاربری مستقل است و به‌طور مستقیم داده و منطق وقوانین اپلیکیشن را مدیریت میکند. دید (view) : دید می‌تواند هر نمایشی از خروجی اطلاعات باشد مثل یک چارت یا دیاگرام. چند دید برای اطلاعات یکسان ممکن است برای مثال یک بار چارت برای مدیر و یک تولبار برای حسابداران. کنترلر: کنترلر ورودی‌ها را میپذیرد و برای مدل یا دید به فرمان تبدیل میکند. بر هم کنش: به علاوه برای تقسیم اپلیکیشن به سه قسمت ,طراحی مدل و دید و کنترلر برهم کنش بین ان‌ها را مشخص میکند. یک مدل(model ) داده ی باز یابی شده از دستور کنترلر و نمایش داده شده در دید را ذخیره میکند. یک دید(view ) بر اساس تغییر در مدل خروجی را به کاربر می‌دهد. یک کنترلر می‌تواند با فرستادن دستور به مدل وضعیت مدل را ارتقا دهد(تغییر یک داکیومنت) .همچنین می‌تواند فرمان‌ها را به دیدهای مرتبط بفرستد تا حضور دید را د مدل تغییر دهد.

مزایا و معایب

فایده‌های MVC :

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

مضرات MVC :

  • هدایت یا دنبال کردن کد: هدایت یا دنبال کردن فریم وورک می‌تواند پیچیده باشد زیرا به این نیاز است که کاربر خود را با ضوابط و معیارهای ساختاری MVC وفق دهد.
  • سازگاری چند ساختاری : خصوصیت چند ساختاری بودن باعث پراکندگی و ناسازگاری میان اجزا می‌شود بنا بر ای نیاز است که کسانی که آن را پیشرفت می‌دهند سازگاری و هماهنگی میان اجزا حفظ شود.
  • کسانی که از MVC استفاده می‌کنند باید در چند زمینه ی تکنولوژی مهارت داشته باشند.

منابع (Reference):

-- Wikipedia () Model–view–controller, Available at: https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller (Accessed: 2018-06-23).
-- Stanley Idesis () Learn the Model-View-Controller Pattern, Available at: https://openclassrooms.com/courses/develop-your-first-android-application/learn-the-model-view-controller-pattern (Accessed: 2018-06-23).
-- Codecademy () MVC: Model, View, Controller, Available at: https://www.codecademy.com/articles/mvc (Accessed: 2018-06-23).
-- Harvey M. Deitel, Paul J. Deitel, Abbey Deitel (2012) Internet & World Wide Web How to Program, 5 edn., London: Pearson.

گردآوری : کاوه رضائی