ضرورت ایجاد معماری MVVM

همانطور که می‌دانید در پروژه‌های تجاری بزرگ آنچه بیش از هر چیز اهمیت دارد انعطاف پذیری در زمان توسعه است به طوری که تیم بتوانند به خوبی با یکدیگر کار کنند ایجاد این معماری توسط جان گوسمن و معرفی آن در جت پک گوگل پاسخی به بهبود هر چه بیشتر این نیاز بود.

می توان گفت پایه اصلی این معماری جداسازی منطق از لی اوت و استایل اپلیکیشن است به طوری که در تیم فردی می تواند روی استایل برنامه کارکند و همزمان فرد دیگر تیم منطق ان را پیاده سازی کند این حالت در نهایت به خوانایی هر چه بیشتر کد و انعطاف پذیری کل پروژه منجر خواهد شد.

حروف MVVM مخففModel، View، ViewModel هستند.

لایه Model

این لایه شامل تمامی موارد مرتبط با داده مانند Api ها، کلاس ها مانند Entitiy ها ، فایربیس و ... هست اما در این لایه شرایطی حاکم است به این مفهوم که این لایه از view و viewmodel بی اطلاع است یعنی استقلالی برای خود دارد.

لایه view

اکتیویتی‌ها، فرگمنت‌ها، لایه‌های ایکس ام ال همگی در این لایه قرار می گیرند نکته ای که در اینجا مهم است اینجاست که این لایه تمامی موارد لازم را به viewmodel ارسال می کند اما به طرز جذابی پاسخ را به طور مستقیم دریافت نمی‌کند همچنین این لایه می تواند تحت شرایطی که لازم باشد از viewmodel درخواست کند که پردازشی را صورت دهد و model را براساس آن بروزرسانی کند.

لایه viewmodel

این لایه واسطی بین دو لایه دیگر است کارکرد این لایه به این شکل است که داده های مورد نیاز را از model دریافت می‌کند و به view تحویل می‌دهد از جمله موارد مهم که در این لایه انجام می‌شود می توان به عملیات بایندینگ دیتا اشاره کرد اما از جمله نکات مهم در این لایه این است که وظایف inflate لایه ها و استارت اکتیویتی‌ها به عهده این لایه نیست و باید از ان اجتناب کرد.

در حال حاضر از دو روش viewBinding و Rxjava برای پیاده سازی این معماری استفاده می شود به طور خلاصه در viewBinding تمامی لایه ایکس ام ال تحت یک کلاس در اکتیویتی و فرگمنت قرار می‌گیرد و تمامی عملیات‌های لازم تحت این کلاس صورت می‌پذیرد همچنین در RXjava تمامی محتوای قابل نمایش تحت یک ترد جداگانه به یوزر (Observe) نمایش داده می‌شود.