MVC(Model-View-Controller)
- 视图(View):用户界面。
- 控制器(Controller):业务逻辑
- 模型(Model):数据保存
- View 传送指令到 Controller
- Controller 完成业务逻辑后,要求 Model 改变状态
- Model 将新的数据发送到 View,用户得到反馈
不足之处:依赖太多
View 依赖Controller和Model
Controller依赖View和Model
Model 和View的关系虽然很弱, 但是也需要某种方式来通知View进行数据更新。
MVP(Model-View-Presenter)
MVP 模式将 Controller 改名为 Presenter,同时改变了通信方向。
将MVC里面的Model和View完全隔离开了,让他们单独变化
特点:
1. 各部分之间的通信,都是双向的。
2. View 与 Model 不发生联系,都通过 Presenter 传递。即View只知道Presenter, 不知道Model 。
3. View 非常薄,不部署任何业务逻辑,称为"被动视图"(Passive View),即没有任何主动性,而 Presenter非常厚,所有逻辑都部署在那里。
不足之处:Presenter还是需要调用View的方法,也就是说Presenter对View有依赖,这样Presenter就没办法单独做单元测试,非得等到界面做好以后才行。
可以让View层提取出接口,Presenter只依赖这个接口
MVVM(Model-View-ViewModel)
MVVM 模式将 Presenter 改名为 ViewModel,基本上与 MVP 模式完全一致。
唯一的区别是,它采用双向绑定(data-binding):View的变动,自动反映在 ViewModel,反之亦然。Angular 和 Ember 都采用这种模式。
在MVP模式中:让Presenter调用View的方法去设置界面,仍然需要大量的、烦人的代码。所以ViewModel就诞生了,他是一个数据结构,而view可以根据这个数据结构的变化自动随之变化
基于WEB的MVC(Model-View-Controller)
现在,B/S(浏览器-服务器)大行其道,用户通过浏览器发出GET,POST请求,服务器端进行处理,处理完以后生成HTML给浏览器。无论什么操作,都是对服务器端URL的访问。
如果把HTML页面比作原来桌面应用程序的View, 服务器无论是Controller还是Model都是无法远程遥控这个View进行处理的。
所以诞生了SpringMVC
不像桌面应用的MVC,这里的Model没法给View 发通知。
也不像MVP, 这里的Controller 也不会调用View的方法来设置界面。
实际上Controller 会选择一个View, 然后把模型数据“丢过去”渲染。
原来的View 变成了View Template(例如JSP , Velocity等等), 经过渲染后变成HTML发给浏览器展示给用户。这就是基于WEB的MVC
最后,由下图可以实现前后端分离
转载参考链接: