MVP与MVVM

Posted by steven on May 8, 2015

MVP和MVVM都是从MVC设计模式演变而来的,基本逻辑比较一致.view负责显示,model负责存储数据,其他负责逻辑处理。

MVP

image

MVP即Model-View-Presenter。Presenter负责逻辑处理。

在MVC设计模式中view是直接可以访问model的,因此View中包含Model的信息和一些业务逻辑处理。在android 和 IOS开发中 Activity/UIViewController并不是一个标准的controller,主要是负责加载应用的布局,处理用户的交互并做出响应,随着界面和业务逻辑复杂度的上升,它们的职责和代码量越来越多,变得庞大臃肿,难以测试和维护。

在MVP中将View交互和业务逻辑处理移动到了Presenter中,activity/UIViewController变成了MVP中的View.只负责UI元素的初始化和建立View和Presenter的关联。

与MVC的主要区别:

1.View和Model不再直接发生关系,而是通过Presenter来与model间接交互 2.一般情况下一个View对应一个Presenter,负责的view也可以对应多个Presenter。由于controller是基于行的,所以可以被多个view共享,controller负责更新View. 3.Presenter与View的交互是通过接口来控制的,更加方便单元测试

MVP设计模式对比MVC的优势: 1.View和Model分离,可以单独修改而不影响另一个 2.可以更高效的使用Model 3.可以个多个View共同使用同一个Presenter,只要这几个View的交互逻辑一致,可以不修改Presenter的逻辑 4.所有业务逻辑都在Presenter中处理,方便测试

MVP的缺点: .Presenter的逻辑处理比较多,职责比较重。Presenter中有大量的view和model的手动同步逻辑,维护起来有一定的成本

MVVM

image

MVVM 即Model-View-ViewModel,与MVP模式基本一致,只是将Presenter换成了ViewModel.但是又有一个重大的区别:数据绑定(data-binding)。即View和ViewModel双向绑定,view变动直接通知ViewModel,ViewModel中的数据/逻辑变动直接更新View.这样开发者的只需要负责业务逻辑开发,不用再处理view和更新和接受事件了。

MVVM于MVP的不同: 1.更低的耦合。View和model的更新和修改相互独立且自动 2.独立开发。开发人员可以专注于逻辑和数据的开发,设计可专注View 3.更好的测试性。现在测试可以只正对ViewModel来编写测试用例,同时测试View

MVVM的缺点 1.界面和业务逻辑非常简单时不适用 2.超级复杂的应用程序,状态和视图比较多且比较复杂的时候,ViewModel的创建和维护成本都比较高 3.数据绑定的声明写在view模板中,不方便debug