در این پست، به معرفی الگوی معماری MVVM و همچنین MVC (جهت مقایسه با MVVM) می پردازیم، مولفه های تشکیل دهنده این الگو ها و نحوه ارتباط مولفه ها با هم را بررسی می کنیم و در ادامه این دو الگو را از جنبه های مختلف با هم مقایسه کرده و مزایا و معایب هریک را بررسی می کنیم.
فریمورک MVC، یک الگوی معماری است که یک برنامه کاربردی را به سه مولفه منطقی اصلی Model، View و Controller تقسیم می کند؛ از این رو به اختصار، MVC گفته می شود و فرم کامل آن، Model View" Controller" است.
در این معماری، یک مؤلفه برای رسیدگی به جنبه های خاص توسعه یک برنامه، ساخته شده است. MVC منطق تجاری (Business Logic) و لایه نمایش (Presentation Layer) را از یکدیگر جدا می کند. این الگوی معماری عمدتا برای رابط های کاربری گرافیکی دسکتاپ (GUI) استفاده می شود.
معماری MVVM، جداسازی توسعه رابط کاربری گرافیکی را با کمک زبان نشانه گذاری یا کد GUI تسهیل می کند. MVVM، مخفف عبارت Model–View–ViewModel است.
بخش View Model از معماری MVVM، یک مبدل مقدار است؛ به این معنا که اشیاء داده ای از مدل را طوری نمایش می دهد که به آسانی قابل مدیریت و ارائه باشند.
سه مولفه اصلی MVC عبارتند از:
در ادامه به برررسی هر یک از مولفه ها می پردازیم:
مولفه مدل، داده ها و منطق مربوط به آن را ذخیره می کند؛ مدل، نشان دهنده داده هایی است که بین مولفه های کنترل کننده یا هر منطق تجاری مرتبط دیگری منتقل می شود.
به عنوان مثال، یک شی Controller به شما کمک می کند تا اطلاعات مشتری را از پایگاه داده بازیابی کنید؛ این شی، داده ها را دستکاری کرده و آن ها را به پایگاه داده باز گردانده یا آن ها را برای نمایش، تحویل می دهد.
نما، بخشی از برنامه است که نمایش داده ها را ارائه می دهد. نماها توسط داده های جمع آوری شده از مدل ها ایجاد می شوند. یک نما، برای ارائه اطلاعات، از مدل درخواست می کند تا خروجی را دوباره به کاربر ارسال کند.
نما همچنین داده های نمودارها و جداول را ارائه می دهد. به عنوان مثال، هر نمای مشتری، شامل تمام اجزای رابط کاربری از جمله Text Box ها، Dropdown ها و... خواهد بود.
کنترلر بخشی از برنامه است که تعامل با کاربر را برعهده دارد. کنترلر ورودی های ماوس و صفحه کلید را از کاربر دریافت کرده، تفسیر می کند و به مدل و نما، اطلاع می دهد که در صورت لزوم تغییر کنند.
یک کنترلر دستوراتی را به مدل ارسال می کند تا وضعیت آن را به روز کند (به عنوان مثال، ذخیره یک سند خاص). کنترلر همچنین دستوراتی را به نمای مربوط به خود ارسال می کند تا نمایش View را تغییر دهد (به عنوان مثال، نمایش یک سند خاص).
معماری MVVM اتصال دو طرفه داده بین view و view-model را ارائه می دهد. همچنین به شما کمک می کند تا به طور خودکار، انتشار تغییرات در View-Model به view را انجام دهید. View-model از الگوی مشاهده گر (Observer Pattern) برای ایجاد تغییرات در view استفاده می کند.
در ادامه به برررسی هر یک از مولفه ها می پردازیم:
مولفه مدل، داده ها و منطق مربوط به آن را ذخیره می کند؛ مدل، نشان دهنده داده هایی است که بین مولفه های کنترل کننده یا هر منطق تجاری مرتبط دیگری منتقل می شود.
به عنوان مثال، یک شی Controller به شما کمک می کند تا اطلاعات مشتری را از پایگاه داده بازیابی کنید؛ این شی، داده ها را دستکاری کرده و آن ها را به پایگاه داده باز گردانده یا آن ها را برای نمایش، تحویل می دهد.
نما، بر پایه اجزای UI مانند HTML، CSS، jQuery و... است. در الگوی MVVM، نما مسئول نمایش داده هایی است که از مدل ویو به عنوان نتیجه دریافت می شود. این نما، همچنین مدل ها را به رابط کاربری (UI) تبدیل می کند.
ویو مدل، مسئول ارائه توابع، دستورات و متدها برای پشتیبانی از وضعیت نما است. همچنین مسئول اجرای مدل و فعال کردن رویدادها در نما است.
برخی از ویژگی های مهم MVC عبارتند از:
منطق تجاری با رابط کاربری، میکس است.
استفاده مجدد و اجرای تست ها سخت است.
عدم پشتیبانی از Formal Validation
افزایش پیچیدگی و ناکارامدی داده ها
دشواری استفاده از MVC با رابط کاربری مدرن
برای استفاده از آن، دانش در چند فناوری مختلف، لازم است.
الگوی 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