معماری MVVM در برنامه نویسی اندروید

سلام توسعه دهنگان عزیر در این مقاله به معماری MVVM در برنامه نویسی اندروید می پردازیم شاید تا به حال اسم Architecture (معماری) MVVM را نشنیده باشید در ادامه با ما همراه باشید تا علت استفاده از معماری MVVM به جای معماری MVP را متوجه شوید.
 

Architecture (معماری) چیست ؟

بهتر از ساده ترین مباحث جلو بریم تا در نهایت به مفهوم MVVM برسیم معماری یا Architecture با توجه به ویکی پدیا معماری نرم افزار اشاره می کند به ساختار لول بالای سیستم نرم افزار که باعث ایجاد نظم و انضباط در ساختار نرم افزار می شود و کلی چیز دیگه که اصلا سر و تهی ندارد ! تعریف ما (برنامه نویسان) از Architecture (معماری) همانند زیر است :
به عبارت ساده ، تصمیم گیری و اجرای یک معماری خاص یا یک الگوی طراحی خاص،که سبب حل مسائل می شود که ما توسعه دهندگان همیشه با آن مواجه هستیم  را معماری یا معماری نرم افزار گویند.
 

برخی از مشکلات

برخی از مشکلات رایج مانند کدگذاری کثیف باعث می شود حتی تغییر کوچکی در یک قسمت از کد به تغییرات / اشکالات در بخش دیگری از کد منجر می شود.

راه حل

اندروید خودش mvc است یعنی در همه جای اکتیویتی کم و بیش خودش مسول است.شاید در ابتدای امر فرض کنید چقدر خوب هست که خودش همه چیز را مدیریت می کند ولی در اصل اینکار فقط بستن برنامه نویس است شما به جز ویژگی های اندروید هیچ کار خاصی نمی توانید انجام دهید یعنی فقط استفاده از متدهایی که من به شما ارئه میدهم و شما مجبورید از آن استفاده کنید و اینجاست که مشکلات تازه شروع می شوند.
در طی مدتی کم خیلی از معماری هایی مانند MVP, FLUX, MVI, MVVM به منظور حل خطا ها به وجود آمدند.

MVP چیست ؟

presenter واسط بین model و view هست presnter اطلاعات رو از model میگیره و به صورت یک مدل جامعی دیتا (یک شکل داده مثلا json پارس شده ) رو به یه فرمت خاص به View تحویل میده
اگر بخوایم به این صورت بگیم که
View ما میشه اکتیویتی یا فرگمنت ها و…. بخشی است که منتظره , یک کاربر باهاش کاربکنه یعنی باهاش interaction انجام بده بهش میگن user interaction.
Presenter : بهش میگن interactor یعنی بخشی که یک کاری رو انجام میده به اصطلاح case handler هست. یعنی شما یه متودی داری که یکسری Listener داره این میشه بخش Presenter شما.
Model : یک نوع interface که وظیفه ی مدیرت داده ها را دارد.
Presenter : بخش میانی بین ,model و view است و کار آن آپدیت کردن Model است این بخش کار منطقی را نیز در دست دارد.
View : هم نتیجه هایی که به صورت منطقی توسط Presenter انجام شده است را نمایش میدهد.

Mvc چیست ؟

Model : چیزی که باید render شود.
View: چگونه Render شود.
Controller: رویداد های و ورودی کاربر را شامل می شود.

در نهایت چرا MVVM ؟

بی نهایت مقاله و صحبت درباره معماری ها وجود دارد و می توانیم قبول کنیم که محبوب ترین این معماری ها که خیلی flexiable و به صورت گسترده مورد استفاده قرار می گیرد MVP است که در بالاتر آن را تشریح کردیم.

باید این رو قبول کرد که همیشه یک چیز مثل mvp همیشه عالی نیست همیشه راهی برای بهتر بودن وجود دارد.

Google معماری MVP را برای اندروید عرضه کرد حتی خود Google درحال استفاده از معماری MVVM است و از آن هم پشتیبانی می کند !
MVP ساده شده شکل زیر است.

MVVM را در شکل زیر خلاصه کردیم.

برای هر اکتیویتی یا فرگمنت (VIEW) نیازمند Presenter است این یکی از سخت ترین شرایط است. Presenter نگهدارنده Reference برای اکتیویتی است و اکتیویتی نگهدارنده Reference برای Presenter است یعنی ارتباط دوطرفه (عکس یک) یکی از ارتباط هایی که شاید بدترین ارتباط ممکن باشد چون مدیریت این ارتباط زمانی که View ها زیاد شود فوق العاده سخت خواهد بود.
ViewModels یک کلاس ساده است که ارتباط منطقی و model پروژه را مدیریت می کند. اگر متوجه این بخش نشدید لینک زیر را مطالعه کنید.

Data Model چیست ؟

مطالعه بیشتر