ناشناس

سوال 3161

الگوی معماری MVVM چه تفاوتی با MVC دارد؟

ثبت پاسخ جدید

برای ثبت پاسخ، لطفا وارد حساب کاربری خود شوید.

پاسخ‌ها

1 پاسخ

معماری MVVM یا همون Model-View-Viewmodel همانند mvc یا mvp یکی از الگو های معماری نرم افزار است. استفاده از آن به ما کمک میکند کدی تمیز، قابل نگهداری ، قابل تست و با خوانایی بالا داشته باشیم. برای فهم کامل این سری از مقاله ها لازم است با معماری MVP آشنایی داشته باشید. همچنین سطح متوسط به بالا در برنامه نویسی اندروید هم لازم است.



به طور کلی MVVM از سه بخش تشکیل شده



ویو(view): وظیفه نمایش اطلاعات و گرفتن داده های ورودی از کاربر را دارد. اطلاعات گرفته شده از کاربر به viewmodel فرستاده می شود.

ویومدل(viewmodel): داده های دریافت شده از مدل را مدریت می کند و به view می فرستد.

مدل(model): وظیفه مدیریت داده ها را بر عهده دارد.

در نگاه اول، به نظر می رسد شباهت بسیار زیادی بین معماری MVP و MVVM وجود دارد. انگار presenter به viewmodel تبدیل شده است. اما تفاوت آنها چیزی فراتر از تغییر نام presenter به viewmodel است. همانطور که در شکل زیر می بینید یک سری اینترفیس هم برای پیاده سازی MVP لازم است. اینترفیس IView بعد ها در presenter استفاده می شود و به طور مستقیم view را تغییر می دهد. در صورتی که در معماری MVVM این اتفاق به طور مستقیم نمی افتد یعنی viewmodel به صورت غیر مستقیم view را تغییر می دهد. نکته دیگر این است که ارتباط بین view و presenter در mvp یک به یک است، اما ارتباط بین view و viewmodel یک به چند است.
اینکه در معماری MVP ، ویو به صورت مستقیم توسط presenter تغییر میکند یک سری مشکلات و پیچیدگی ها را به کد اضافه می کند. زیرا ما مجبوریم حواسمان باشد که ویو در چه وضعیتی قرار دارد و اگر در وضعیت یا onDestroy نبود اجازه به روز رسانی ویو را داریم. به همین دلیل ما مجبوریم در presenter وضعیت view را گزارش دهیم. همین باعث می شود تست کردن کد ها، نگهداری و پیچیدگی کدمان افزایش یابد. اما در معماری MVVM دیگر این مشکل وجود ندارد، چرا که دیگر viewmodel به طور مستقیم با view در ارتباط نیست.