MVC和MVP,MVVM之间的关系
MVC和MVP的关系
我们都知道MVP是从经典的模式MVC演变而来,它们的基本思想有相通的地方:Controller/Presenter负责逻辑的处理,Model提供数 据,View负责显示。作为一种新的模式,MVP与MVC有着一个重大的区别:在MVP中View并不直接使用Model,它们之间的通信是通过 Presenter (MVC中的Controller)来进行的,所有的交互都发生在Presenter内部,而在MVC中View会直接从Model中读取数据而不是通过 Controller。
MVVM和MVP的关系
而 MVVM 模式将 Presenter 改名为 ViewModel,基本上与 MVP 模式完全一致。 唯一的区别是,它采用双向绑定(data-binding):View的变动,自动反映在 ViewModel,反之亦然。这样开发者就不用处理接收事件和View更新的工作,框架已经帮你做好了。
视图化解释关系
MVC架构:
- View:对应于布局文件
- Model:业务逻辑和实体模型
- Controllor:对应于Activity
View可以与Model直接交互。
Controller是基于行为的,并且可以被多个View共享。
可以负责决定显示哪个View。
MVP架构:
- View: 对应于Activity,负责View的绘制以及与用户交互
- Model: 依然是业务逻辑和实体模型
- Presenter: 负责完成View于Model间的交互
View不直接与Model交互,而是通过与Presenter交互来与Model间接交互。
Presenter与View的交互是通过接口来进行的。
通常View与Presenter是一对一的,但复杂的View可能绑定多个Presenter来处理逻辑。
MVVM架构:
- Model:代表你的基本业务逻辑
- View:显示内容
- ViewModel:将前面两者联系在一起的对象
一个ViewModel接口提供了两个东西:动作和数据。动作改变Model的下层(click listener,监听文字改变的listener等等),而数据则是Model的内容。
在MVVM中,ViewModel在改变内容之后通知binding framework内容发生了改变。然后framework自动更新和那些内容绑定的view。这两个组件只是通过ViewModel松耦合在一起。这种设计模式之所以好用和方便,除了明显智能化了的View之外,还方便了测试。因为ViewModel不在依赖于View了,你可以在没有View的情况下也能测试ViewModel。在合适的依赖注入的帮助下,测试就会变得非常简单。
MVVM的优点
- 低耦合 。 视图(View)可以独立于Model变化和修改,一个ViewModel可以绑定到不同的"View"上,当View变化的时候Model可以不变,当Model变化的时候View也可以不变。
- 可重用性 。 你可以把一些视图逻辑放在一个ViewModel里面,让很多view重用这段视图逻辑。
- 独立开发 。 开发人员可以专注于业务逻辑和数据的开发(ViewModel),设计人员可以专注于页面设计。
- 可测试 。 界面素来是比较难于测试的,而现在测试可以针对ViewModel来写。