MVC模式-MVP模式和MVVM

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,反之亦然。

------------------华丽的分割线------------------

参考链接:
  1. segmentfault
  2. 博客园
  3. 简书
  4. 极简
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。