开发应用程序时,以求更好的管理应用程序的复杂性,基于职责分离的思想对应用程序进行分层:前端
MVC 把应用程序分红View、Model、Controller层。vue
MVC出了把应用程序分红View、Model层,还额外的加了一个Controller层,它的职责为进行Model和View之间的协做(路由、输入预处理等)的应用逻辑(application logic);Model进行处理业务逻辑。Model、View、Controller三个层次的依赖关系以下:git
Controller和View都依赖Model层,Controller和View能够互相依赖。Controller和View的依赖关系都是为了把处理用户行为触发的事件处理权交给Controller。github
优势:前端框架
缺点:app
MVP模式是MVC模式的改良。框架
MVP模式有两种:模块化
大多数状况下讨论的都是Passive View模式组件化
MVP模式把MVC模式中的Controller换成了Presenter。MVP层次之间的依赖关系以下:
MVP打破了View原来对于Model的依赖,其他的依赖关系和MVC模式一致。单元测试
调用关系以下:
用户对View的操做都会从View交移给Presenter。Presenter会执行相应的应用程序逻辑,而且对Model进行相应的操做;而这时候Model执行完业务逻辑之后,也是经过观察者模式把本身变动的消息传递出去,可是是传给Presenter而不是View。Presenter获取到Model变动的消息之后,经过View提供的接口更新界面。
优势:
缺点:
Passive View模式,该模式下View很是Passive,它几乎什么都不知道,Presenter让它干什么它就干什么。Supervising Controller模式中,Presenter会把一部分简单的同步逻辑交给View本身去作,Presenter只负责比较复杂的、高层次的UI操做,因此能够把它当作一个Supervising Controller
Supervising Controller模式下的依赖和调用关系:
Supervising Controller用得比较少
MVVM能够看做是一种特殊的MVP(Passive View)模式,或者说是对MVP模式的一种改良。
MVVM表明的是Model-View-ViewModel,ViewModel的含义就是 "Model of View",视图的模型。它的含义包含了领域模型(Domain Model)和视图的状态(State)。
在图形界面应用程序当中,界面所提供的信息可能不只仅包含应用程序的领域模型。还可能包含一些领域模型不包含的视图状态,例如电子表格程序上须要显示当前排序的状态是顺序的仍是逆序的,而这是Domain Model所不包含的,但也是须要显示的信息。
能够简单把ViewModel理解为页面上所显示内容的数据抽象,和Domain Model不同,ViewModel更适合用来描述View。
MVVM的依赖关系和MVP依赖,只不过是把P换成了VM。
MVVM的调用关系和MVP同样。可是,在ViewModel当中会有一个叫Binder,或者是Data-binding engine的东西。之前所有由Presenter负责的View和Model之间数据同步操做交由给Binder处理。你只须要在View的模版语法当中,指令式地声明View上的显示的内容是和Model的哪一块数据绑定的。当ViewModel对进行Model更新的时候,Binder会自动把数据更新到View上去,当用户对View进行操做(例如表单输入),Binder也会自动把数据更新到Model上去。这种方式称为:Two-way data-binding,双向数据绑定。能够简单而不恰当地理解为一个模版引擎,可是会根据数据变动实时渲染。
总结: MVVM把View和Model的同步逻辑自动化了。之前Presenter负责的View和Model同步再也不手动地进行操做,而是交由框架所提供的Binder进行负责。只须要告诉Binder,View显示的数据对应的是Model哪一部分便可。
MVVM 前端框架有: angular、vue.js
优势:
缺点: