愿你坚持不懈,努力进步,进阶成自己理想的人

—— 2017.09, 写给3年后的自己

对MV*的理解

大型软件的开发需要有清晰合理的架构,否则将难以开发和维护。而MV*则是为了解决问题而出现的软件架构

目前的MV*主要有MVCMVPMVVM,而三者的主要差别,在于如何粘合Model和View层。

一、MVC

MVC是最常见也是最经典的软件架构,MVC中把软件分为三个部分:
1)Model 层:保存数据
2)View 层:向用户呈现信息
3)Controller 层:处理业务逻辑,将用户输入转化为相应的命令,通知M层进行更新
其通信图如下:

在MVC中,controller接受view的操作事件,根据事件的不同,进行不同的操作。可以是调用Model层的接口进行数据操作,也可以是进行View的跳转。通常而言,一个Controller可以对应多个View,但一个View不宜对应多个Controller。Controller不关注View的具体实现,而只需要被动地接收来自View的通知,而Model层的变动不直接通知View,View采用观察者模式来监听Model的变化


二、MVP

MVP模式中,取消了Controller,取而代之的是Presenter。MVP模式有以下的特点:
1)通信是双向的
2)View与Model不直接通信,通过Presenter来联系
3)View层很薄,不包含任何业务逻辑,它是被动视图,没有主动性。而Presenter层很厚,所有的逻辑都部署在Presenter层
其通信图如:

MVP中,Presenter的作用是接收View的命令,然后对Model进行操作。和MVC模式不同的是,Presenter会反作用于View,一个Presenter只对应一个View。而Model层的更新首先通知Presenter,再由Presenter去更新View


三、MVVM

MVVM是当前前端开发领域最为流行的架构模式。其和MVP模式非常类似,而它和MVP模式的主要区别在于:MVVM中采用的是双向绑定(View层的变动自动反映在ViewModel中,而ViewModel的变动,也自动反应在View中)
其通信图如:

对于MVPMVVM,它们完全隔离了ModelView,而在MVC中,ModelView则可以进行通信。MVPMVVM其实是MVC模式的变种,可以更好地适应富客户端的开发需求

参考

1. 前端MV*框架之经典MVC
2. MVC,MVP 和 MVVM 的图示
3. 对MVC、MVP、MVVM的理解