ضرورت ایجاد معماری MVVM
همانطور که میدانید در پروژههای تجاری بزرگ آنچه بیش از هر چیز اهمیت دارد انعطاف پذیری در زمان توسعه است به طوری که تیم بتوانند به خوبی با یکدیگر کار کنند ایجاد این معماری توسط جان گوسمن و معرفی آن در جت پک گوگل پاسخی به بهبود هر چه بیشتر این نیاز بود.
می توان گفت پایه اصلی این معماری جداسازی منطق از لی اوت و استایل اپلیکیشن است به طوری که در تیم فردی می تواند روی استایل برنامه کارکند و همزمان فرد دیگر تیم منطق ان را پیاده سازی کند این حالت در نهایت به خوانایی هر چه بیشتر کد و انعطاف پذیری کل پروژه منجر خواهد شد.
حروف MVVM
مخففModel، View، ViewModel
هستند.
لایه Model
این لایه شامل تمامی موارد مرتبط با داده مانند Api
ها، کلاس ها مانند Entitiy
ها ، فایربیس و ... هست اما در این لایه شرایطی حاکم است به این مفهوم که این لایه از view
و viewmodel
بی اطلاع است یعنی استقلالی برای خود دارد.
لایه view
اکتیویتیها، فرگمنتها، لایههای ایکس ام ال همگی در این لایه قرار می گیرند نکته ای که در اینجا مهم است اینجاست که این لایه تمامی موارد لازم را به viewmodel
ارسال می کند اما به طرز جذابی پاسخ را به طور مستقیم دریافت نمیکند همچنین این لایه می تواند تحت شرایطی که لازم باشد از viewmodel
درخواست کند که پردازشی را صورت دهد و model
را براساس آن بروزرسانی کند.
لایه viewmodel
این لایه واسطی بین دو لایه دیگر است کارکرد این لایه به این شکل است که داده های مورد نیاز را از model
دریافت میکند و به view
تحویل میدهد از جمله موارد مهم که در این لایه انجام میشود می توان به عملیات بایندینگ دیتا اشاره کرد اما از جمله نکات مهم در این لایه این است که وظایف inflate
لایه ها و استارت اکتیویتیها به عهده این لایه نیست و باید از ان اجتناب کرد.
در حال حاضر از دو روش viewBinding
و Rxjava
برای پیاده سازی این معماری استفاده می شود به طور خلاصه در viewBinding
تمامی لایه ایکس ام ال تحت یک کلاس در اکتیویتی و فرگمنت قرار میگیرد و تمامی عملیاتهای لازم تحت این کلاس صورت میپذیرد همچنین در RXjava
تمامی محتوای قابل نمایش تحت یک ترد جداگانه به یوزر (Observe
) نمایش داده میشود.