桌面应用的MVC
一.MVC模式
M表示Model,专门处理业务逻辑
V表示View,专注页面布局和数据显示
C表示Controller,翻译用户的输入,操作模型和视图
View将页面请求送给Controller,Controller找到Model或者创建Model,然后Model通知View显示结果.
MVC模式依赖关系:View依赖Controller和Model,Controller依赖View和Model,Model和View关系微弱,也需要某种方式通知View数据更新
耦合度高,低内聚。
二.MVP模式
改变Controller,将Model和View完全隔离。
P表示Presenter,在MVP中View只知道Presenter不知道Model
View调用Presenter,Presenter操作Model,Model中进行业务运算,然后Presenter更新View(Presenter调用View的方法,Presenter依赖于View,即Presenter无法做单元测试,等到界面做好之后才可以)。
改进:让View层提取出接口,Presenter只依赖这个接口
Presenter不用依赖真正的界面测试,增加了复用性,只要View实现了那个接口,Presenter就可以
三.MVVM模式
使用Presenter调用View中的方法设置界面,需要繁琐的代码。
告诉View一个数据结构,View根据该数据结构的变化而变化:即ViewModel,和View层绑定,ViewModel变化,View更新。
注:实际上微软的WPF和Silverlight, Android等框架和系统都可以实现View和ViewModel之间的映射和绑定
Web应用程序的MVC
SpringMVC
与桌面MVC不同,Model没法给View发通知,与MVP不同,Controller不会调用View方法设置界面。
Controller会选择一个View,将模型数据丢过去渲染。原来的View变为View Template(JSP,velocity等),渲染后变为HTML展示给客户。
前后端分离
- 早期B/S应用程序中,访问服务器,HTML整体发给浏览器,即全部刷新,Ajax实现了局部刷新。
- 实现在浏览器端使用MVVM,服务器端使用MVC.
- 浏览器端:View => ViewModel => Model => <=HTTP=> => 服务器端(Rod Johnson的SpringMVC)
如有错误,烦请指正,谢谢!