Skip to content

Files

Latest commit

 

History

History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
# هدف الگوی معماریِ MVC، سه مفهوم ذخیره‌سازی، نمایش و به‌روزآوری داده‌ها را به سه مؤلفه تقسیم می‌کند و به طوری که هر کدام به طور مجزا قابل تست باشند.

ساختار

MVC class structure

  • با توجه به ساختار کلاس MVC، کلاس‌های View , Controller به کلاس Model وابسته‌اند و کلاس مدل به هیچ کلاسی وابسته نیست.
  • مدل MVC پایه‌ترین الگو برای جداسازی منطق واسط کاربری و منطق کاری‌ست.

Separation of concerns (SoC)

اطلاعات بیشتر در ویکی‌پدیا

مسئله

  • منطق UI بیشتر از منطق Business تغییر می‌کند، بنابراین اگر قرار باشد این دو منطق با هم کار کنند، هر وقت که خواستیم رابط کاربری را تغییر دهیم باید شیء‌ای را تغییر دهیم که در آن منطق Bussiness هم وجود دارد. و پس از هر تغییر کوچک در UI مجبوریم تمام Business logic را تست کنیم.
  • می‌خواهیم داده‌ها را به شکل‌های مختلفی نمایش دهیم. (رابط‌های گرافیکی متفاوت)
  • طراحی رابط کاربری دو قسمت داد ۱- نمایش (دریافت داده‌ها و نمایش آن‌ها) ۲- به‌روزآوری (تغییر داده‌ها که قسمت منطق کاری محسوب می‌شود.)
  • انجام تست خودکار روی رابط کاربری بسیار سخت‌تر از تست خودکار روی منطق کاری‌ست.

Model (Domain Element)

  1. حاوی تمام داده‌ها
  2. چگونگی رفتار مدل
  3. مدل به View و Controller ارجاع ندارد و تنها دستورات این دو کلاس را پردازش می‌کند.

View

  1. ارجاعی به کنترولر ندارد و تنها دستورات کنترولر را پردازش می‌کند.
  2. ارجاعی به مدل دارد و داده‌ها را از مدل می‌گیرد تا آن‌ها را نمایش دهد.

Controller

  1. هم به View و هم به Model اشاره می‌کند.

گونه‌ها

Passive Model

Passive Model

Active Model

Active Model Class Diagram Behavior of the active model

مشکلات

پیچیدگی

با جدا کردن سه مفهوم، متعاقباً پیچیدگی نیز بیشتر می‌شود.

هزینهٔ به‌روزآوری‌های مکرر

این الگو، مدل و رابط گرافیکی را از هم جدا می کند و متعاقباً با هر تغییر در رابط گرافیکی باید تغییر در مدل ایجاد کنیم و بالعکس. در صورتی که تعداداین تغییرات خیلی بالا باشد، هزینهٔ چنین تغییراتی زیاد می‌شود و راه حل این است که تغییرات متعدد را بسته‌بندی کنیم و در یکجا ارسال کنیم.

الگوهای مشتق شده

Document-View

در این الگو، View و Controller با هم ترکیب می‌شوند.

الگوهای مرتبط

  1. Observer

مثال

وقتی کاربر درجهٔ حرارت را به فارنهایت وارد کرده و دکمهٔ تبدیل به سانتیگراد را می‌زند آنگاه

  1. کنترولر event مربوط به Button تبدیل درجه را دریافت می‌کند.
  2. کنترولر ورودی را به مدل ارسال کرده و درخواست تبدیل به سانتیگراد را ارسال می‌کند.
  3. مدل تبدیل را انجام می‌دهد.
  4. کنترولر از View درخواست می‌کند تا نتیجه را نشان دهد.
  5. کلاس View نتیجه را از مدل دریافت می کند.
  6. کلاس View نتیجه را نمایش می‌دهد.

منابع

  1. OpenGL Windows GUI Application
  2. Microsoft Model-View-Controller