چیست؟ MVVM , MVP تفاوت پترن های ترجیح داده می شود؟ MVP به استفاده از MVVM چرا استفاده از
در اینجا سه پترن مهم MVC , MVP , MVVM را مورد بحث قرار می دهیم .
معماری mvc که نام آن مخفف Model-View-Controller است به این صورت است که کلمه Model به فایل های Model داده های شما اشاره می کند . View به فایل های XML شما و Controller به فایل هایی که منطق اپلیکیشن شما را پیش می برند اشاره میکند .
مشکل این معماری استفاده از unitTest ها است . model ها تاز زمانی که فعالیتشان به چیز دیگری گره نخورده قابل تست هستند اما فعالیت Controller ها به Api های اندروید گره خورده و این مورد تست آنها را سخت میکند . هم چنین انعطاف پذیری و ماژولار کردن اپلیکشن ها مشکل دیگر این معماری است چون فعالیت View و Controller را نیز تغییر دهیم . هم چنین Maintence نیز مشکل دیگر این معماری است .
در معماری MVP که نام آن مخفف Model-View-Presenter است View تمامی فایل های .xml و کلاس های اکتیو.یتی و فرگمنت ها را شامل می شود و منطق و توابع برنامه در گروه Presenter قرار می گیریتد و این مورد باعث راخت تر شدن عمل unit test می شود .
در معماری MVVM که نام آن مخفف Model-View-ViewModel است . Model ی دریافت این داده ها و شامل کلاس های مدل اپلیکشن و کلاس هایی که وظیفه ی آن ها دریافت داده هاست می شود و View Model ها وظیفه و آماده سازی ان ها برای استفاده در View ها را دارند .
از دیگر تفاوت ها mvvm اینه که viewmodel هیچ دیدی نداره که با کدوم ویو کار می کنه
یه تفاوت مهم که سجاد هم بهش اشاره کرد اینه توی MVP اون Presenter یه رفرنس به View داره و وقتی اطلاعات رو از Model گرفت، مستقیم View رو آپدیت میکنه.
ولی توی MVVM اینجوریه که ViewModel به View رفرنسی نداره و خودشو براساس اطلاعاتی که از Model میگیره آپدیت میکنه و حالا View از طریق DataBinding یا اینکه با Subscribe شدن به ViewModel تغییرات رو از ViewModel میگیره.
این نکاتی که در مورد MVVM گفته شدن بنظرم این که رفرنسی از ویو رو توی ویو مدل نداریم درست هست ولی این که این معماری نوشتن تست رو برای ما ساده تر می کنه بنظرم توضیح دقیقی نیست چون توی MVP هم ما از ویو یه اینترفیس داریم و میتونیم با ماک کردن اونُ تست های خودمون رو انجام بدیم از طرفی هم این که ویو مدل هیج دیدی نداره که با کدوم ویو داره کار میکن خب ما هم این موضوع رو توی MVP داریم و اصلا این که داریم ارتباط بین ویو و پرزنتر رو با ابسترکشن میذاریم یکیش همینه فکر میکنم که پرزنتر وابستگی به نوع اصلی ویو نداشته باشه و برای ما محدودیت نسازه
در رابطه با تست درست میگید، البته توی جواب اولیه @Sanaebadi97 هم حرف شمارو زده و گفته MVP تست رو آسون میکنه.
@abbasiehsan1991 در رابطه با حرف آخرتون، نکته اینه توی MVP بالاخره بین Presenter و View یه قراردادی هست. و Presenter میدونه View چه متدهایی داره و بهش رفرنس داره. ولی MVVM اینجوری نیست.
مهماری های mvp و mvc معمارهای clean نیستن برای این معماری های هم میشه تست نوشت، اما ترجیح می دید که برای کدوم معماری تست بنویسید، بعد یه مدت کلافه کننده می شه