امین باقری
امین باقری
خواندن ۶ دقیقه·۳ سال پیش

الگوی معماری MVVM و مقایسه آن با MVC

مقدمه

در این پست، به معرفی الگوی معماری MVVM و همچنین MVC (جهت مقایسه با MVVM) می پردازیم، مولفه های تشکیل دهنده این الگو ها و نحوه ارتباط مولفه ها با هم را بررسی می کنیم و در ادامه این دو الگو را از جنبه های مختلف با هم مقایسه کرده و مزایا و معایب هریک را بررسی می کنیم.

MVC چیست؟

فریمورک MVC، یک الگوی معماری است که یک برنامه کاربردی را به سه مولفه منطقی اصلی Model، View و Controller تقسیم می کند؛ از این رو به اختصار، MVC گفته می شود و فرم کامل آن، Model View" Controller" است.

در این معماری، یک مؤلفه برای رسیدگی به جنبه های خاص توسعه یک برنامه، ساخته شده است. MVC منطق تجاری (Business Logic) و لایه نمایش (Presentation Layer) را از یکدیگر جدا می کند. این الگوی معماری عمدتا برای رابط های کاربری گرافیکی دسکتاپ (GUI) استفاده می شود.

MVVM چیست؟

معماری MVVM، جداسازی توسعه رابط کاربری گرافیکی را با کمک زبان نشانه گذاری یا کد GUI تسهیل می کند. MVVM، مخفف عبارت Model–View–ViewModel است.

بخش View Model از معماری MVVM، یک مبدل مقدار است؛ به این معنا که اشیاء داده ای از مدل را طوری نمایش می دهد که به آسانی قابل مدیریت و ارائه باشند.


الگوی MVC

سه مولفه اصلی MVC عبارتند از:

  • Model: شامل تمام داده ها و منطق مربوط به آن ها.
  • View: نمایش داده به کاربر
  • Controller: رابطی بین مولفه های Model و View.

در ادامه به برررسی هر یک از مولفه ها می پردازیم:

مدل (Model)

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

به عنوان مثال، یک شی Controller به شما کمک می کند تا اطلاعات مشتری را از پایگاه داده بازیابی کنید؛ این شی، داده ها را دستکاری کرده و آن ها را به پایگاه داده باز گردانده یا آن ها را برای نمایش، تحویل می دهد.

نما (View)

نما، بخشی از برنامه است که نمایش داده ها را ارائه می دهد. نماها توسط داده های جمع آوری شده از مدل ها ایجاد می شوند. یک نما، برای ارائه اطلاعات، از مدل درخواست می کند تا خروجی را دوباره به کاربر ارسال کند.

نما همچنین داده های نمودارها و جداول را ارائه می دهد. به عنوان مثال، هر نمای مشتری، شامل تمام اجزای رابط کاربری از جمله Text Box ها، Dropdown ها و... خواهد بود.

کنترلر (Controller)

کنترلر بخشی از برنامه است که تعامل با کاربر را برعهده دارد. کنترلر ورودی های ماوس و صفحه کلید را از کاربر دریافت کرده، تفسیر می کند و به مدل و نما، اطلاع می دهد که در صورت لزوم تغییر کنند.

یک کنترلر دستوراتی را به مدل ارسال می کند تا وضعیت آن را به روز کند (به عنوان مثال، ذخیره یک سند خاص). کنترلر همچنین دستوراتی را به نمای مربوط به خود ارسال می کند تا نمایش View را تغییر دهد (به عنوان مثال، نمایش یک سند خاص).


الگوی MVVM

معماری MVVM اتصال دو طرفه داده بین view و view-model را ارائه می دهد. همچنین به شما کمک می کند تا به طور خودکار، انتشار تغییرات در View-Model به view را انجام دهید. View-model از الگوی مشاهده گر (Observer Pattern) برای ایجاد تغییرات در view استفاده می کند.

در ادامه به برررسی هر یک از مولفه ها می پردازیم:

مدل (Model)

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

به عنوان مثال، یک شی Controller به شما کمک می کند تا اطلاعات مشتری را از پایگاه داده بازیابی کنید؛ این شی، داده ها را دستکاری کرده و آن ها را به پایگاه داده باز گردانده یا آن ها را برای نمایش، تحویل می دهد.

نما (View)

نما، بر پایه اجزای UI مانند HTML، CSS، jQuery و... است. در الگوی MVVM، نما مسئول نمایش داده هایی است که از مدل ویو به عنوان نتیجه دریافت می شود. این نما، همچنین مدل ها را به رابط کاربری (UI) تبدیل می کند.

ویو مدل (View Model)

ویو مدل، مسئول ارائه توابع، دستورات و متدها برای پشتیبانی از وضعیت نما است. همچنین مسئول اجرای مدل و فعال کردن رویدادها در نما است.


ویژگی های MVC

برخی از ویژگی های مهم MVC عبارتند از:

  • چارچوبی با قابلیت تست بالا، توسعه پذیر و قابل اتصال
  • ارائه کنترل کامل بر HTML همانند URL ها
  • پشتیبانی از توسعه تست محور (Test Driven Development)
  • این معماری، جداسازی منطق را ارائه می دهد.
  • ارائه نقشه برای URL های قابل جستجو

ویژگی های MVVM

  • MVVM برای برنامه های دسکتاپ با قابلیت اتصال داده نوشته شده است.
  • ویو مدل برای اعمال تغییرات، از یک الگوی مشاهده گر استفاده می کند.

مزایای MVC

  • توسعه مولفه های مختلف را می توان به صورت موازی انجام داد.
  • با تقسیم یک برنامه به واحدهای جداگانه (MVC) از پیچیدگی جلوگیری می کند.
  • بهترین پشتیبانی را برای توسعه تست محور ارائه می دهد.
  • یک جداسازی تمیز از دغدغه ها (SoC) را فراهم می کند.
  • همه کلاس ها و اشیاء، مستقل از یکدیگر هستند تا بتوانید آنها را جداگانه آزمایش کنید.
  • امکان گروه بندی منطقی اقدامات مرتبط روی یک کنترلر را با هم فراهم می کند.

مزایای MVVM

  • جداسازی منطق تجاری از رابط کاربری
  • نگهداری و تست آسان
  • سهولت استفاده مجدد از مولفه ها
  • اتصال سست
  • شما می توانید موارد تست واحد را برای هر دو لایه viewmodel و Model بدون نیاز به ارجاع به View بنویسید.

معایب MVC

منطق تجاری با رابط کاربری، میکس است.

استفاده مجدد و اجرای تست ها سخت است.

عدم پشتیبانی از Formal Validation

افزایش پیچیدگی و ناکارامدی داده ها

دشواری استفاده از MVC با رابط کاربری مدرن

برای استفاده از آن، دانش در چند فناوری مختلف، لازم است.

معایب MVVM

  • نگهداری از تعداد زیادی قطعه کد در کنترلر
  • برخی از افراد بر این باورند که برای رابط های کاربری ساده، معماری MVVM می تواند زیادی باشد.
  • اتصال محکمی بین نما و ویو مدل ارائه نمی دهد.

تفاوت های بین MVVM و MVC


  • چارچوب MVC یک الگوی معماری است که یک برنامه کاربردی را به سه مولفه منطقی Model، View و Controller تقسیم می کند. از طرف دیگر MVVM جداسازی توسعه رابط کاربری گرافیکی را با کمک زبان نشانه گذاری یا کد GUI تسهیل می کند.
  • در MVC، کنترلر نقطه ورود به برنامه است، در حالی که در View ،MVVM نقطه ورود به برنامه است.
  • مؤلفه مدل در MVC را می توان به صورت جدا از کاربر آزمایش کرد، در حالی که MVVM، انجام آزمایش واحد (Unit Test) به صوررت جداگانه را تسهیل می کند و کد آن، مبتنی بر رویداد (Event-Driven) است.
  • معماری MVC دارای روابط "یک به چند" بین Controller و View است، در حالی که در معماری MVVC، روابط "یک به چند" بین View و View Model است.
  • در MVC، نما ارجاعی به کنترلر ندارد اما در MVVM، نما ارجاعاتی به ویو مدل دارد.
  • MVC یک مدل قدیمی است در حالی که MVVM یک مدل نسبتا جدید است.
  • خواندن، تغییر، تست واحد و استفاده مجدد از مدل MVC، مشکل است در حالیکه در MVVM، فرآیند اشکال زدایی زمانی پیچیده خواهد شد که پیوندهای پیچیده داده ای داشته باشیم.

جمع بندی

الگوی Model-View-ViewModel کمک می کند تا منطق کسب و کار و ارائه یک برنامه کاربردی را از رابط کاربری (UI) آن جدا کنید. حفظ جدایی تمیز بین منطق برنامه و رابط کاربری به رفع مشکلات متعدد توسعه کمک می کند و می تواند آزمایش، نگهداری و تکامل یک برنامه را آسان تر کند. همچنین می‌تواند فرصت‌های استفاده مجدد از کد را تا حد زیادی بهبود بخشد و به توسعه‌دهندگان و طراحان رابط کاربری اجازه دهد تا در هنگام توسعه بخش‌های مربوطه خود از یک برنامه، راحت‌تر با یکدیگر همکاری کنند.

با استفاده از الگوی MVVM، رابط کاربری برنامه و منطق ارائه و کسب و کار زیربنایی، به سه کلاس جداگانه تقسیم می‌شود: view، که UI و منطق UI را در بر می‌گیرد. ویو مدل، که منطق و حالت ارائه را در بر می گیرد. و مدلی که منطق تجاری و داده های برنامه را در بر می گیرد.


«این مطلب، بخشی از تمرینهای درس معماری نرم‌افزار در دانشگاه شهیدبهشتی است.»

مراجع

https://docs.microsoft.com/en-us/xamarin/xamarin-forms/enterprise-application-patterns/mvvm

Enterprise Application Patterns eBook

https://www.guru99.com/mvc-vs-mvvm.html#2

معماری نرم افزار بهشتیمعماری نرم افزارالگو های معماری
شاید از این پست‌ها خوشتان بیاید