MVC模式:
image.png
- MVC的所有通信都是单向的。
- view传送指令到controller(用户也可以直接将指令传到controller)。
- controller完成业务逻辑后要求model改变状态。
- model将新的数据发送到view,用户得到反馈。
MVP模式:
MVP模式将Controller改名为Presenter,同时改变了通信方向。
image.png
- 各部分之间的通信都是双向的。
- View与Model不发生联系,都通过Presenter传递
- View非常薄,不部署任何业务逻辑,称为“被动视图”,即没有任何主动性,而Presenter非常厚,所有逻辑都部署在这里
MVVM模式:
image.png
- View和Model之间没有联系,通过ViewModel进行交互
- View可独立于Model变化和修改,一个ViewModel可以绑定到不同的View上,当View变化的时候Model可以不变,当Model变化的时候View也可以不变。
- Model和ViewModel之间的交互是双向的,因此视图的数据的变化会同时修改数据源,而数据源数据的变化也会立即反应到View上。
- 一些视图逻辑可以放在一个ViewModel里面,让很多view重用这段视图逻辑。
- 可测试。界面素来是比较难于测试的,而现在测试可以针对ViewModel来写。
区别:
MVP与MVC区别:
- 在MVC里,View是可以直接访问Model的!从而,View里会包含Model信息,不可避免的还要包括一些业务逻辑。 在MVC模型里,更关注的Model的改变,而同时有多个对Model的不同显示,即View。
- 在MVC模型里,Model不依赖于View,但是View是依赖于Model的。不仅如此,因为有一些业务逻辑在View里实现了,导致要更改View也是比较困难的,至少那些业务逻辑是无法重用的
- 在MVP中View并不直接使用Model,它们之间的通信是通过Presenter来进行的,所有的交互都发生在Presenter内部。
- Presenter与具体的View是没有直接关联的,而是通过定义好的接口进行交互,从而使得在变更View时候可以保持Presenter的不变,即重用!
MVVM与MVP区别:
- mvvm模式基本与MVP模式完全一致,唯一的区别是,它采用双向绑定(data-binding): View的 变动,自动反映在View Model,反之亦然。