MVC vs MVP vs MVVM

MVC,MVP,MVVM是三种流行的设计模式,常用于框架设计中。

MVC最早由Trygve Reenskaug发明的,并最早应用在Smalltalk-80中。MVC是被误读最多的设计模式之一,关于它的解释和实现有很多版本,也有过很多“升级”解释,但设计思想是一样,这里仅描述它原始概念。
在MVC中,View和Controller是成对出现的,共同称为表现层,Model可以为多个VC组合作为数据源,这就是MVC业务和表现分离的实现。其中,Model是重量层,实现业务逻辑和数据操作,View是UI层,仅仅实现数据展示,和用户交互,而Controller用于将用户操作传递给Model进行业务操作,并根据Model返回值执行相应UI操作。
MVC是用观察者模式实现的,从下图可以看出,View监听Model,Controller监听Model和View,而Model监听Controller。

MVP最早来自Taligent发布在IBM开发者中心的文章中,是MVC模式的衍生和改进。
在MVP中,Controller替换为Presenter,它更像是一个中介,处于M和V中间,这时M和V不再直接通信,而是通过Presenter。如下图所示,用户操作通过P从V传递到M,而数据通过P从M返回给V。它使MV之间松耦合,然而确加重MP之间的耦合度,这个可以为M增加一个Facade(如get操作)与P通信。

MVVM源自于Martin Flower的Presentation Model (PM),关于MVVM的理解目前是统一的。和MVC不同的是,VM更重,它除了负责与M的业务通信,同时还是V的管理员,如下图,它是独立于V的,V和VM是多对一的关系,如下图。数据实际存储在VM中,V只有对VM中数据的引用,通过双向绑定实现数据的同步。

 

REFERENCE:
https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller
http://wiki.c2.com/?ModelViewController
https://martinfowler.com/eaaDev/uiArchs.html#ModelViewController
http://wiki.c2.com/?ModelViewPresenter
https://medium.com/@ankit.sinhal/mvc-mvp-and-mvvm-design-pattern-6e169567bbad#.tt8ljstee
http://www.infoworld.com/article/2926003/microsoft-net/exploring-the-mvc-mvp-and-mvvm-design-patterns.html

MVC vs MVP vs MVVM