一、MVC(Model-View-Controller)
模型(Model):业务模型(数据库操作、文件访问等)
视图(View):交互的界面,如Web前端(HTML/CSS/Java Script)
控制器(Controller):负责连接View与Model(对来自View数据进行预处理、决定调用哪个Model的接口等等)
MVC只是一种框架模式,针对不同的平台环境的实现方式会有些区别:
Web MVC
经典的Web MVC模式,实现的框架有ASP.Net MVC/Spring MVC 等,在Web MVC中,Model的业务结束之后,Controller通知View
进行更新以表现出当前Model的状态。
桌面UI MVC
经典实现有PureMVC,PureMVC 是在基于MVC模式建立的一个轻量级的应用框架。它的Model与View的交互是通过观察者模式
实现的,当Model有变化要通知View的时候Model把消息发送给通知分发中心,然后通知分发中心把消息发送到View。
总结
MVC模式实现了项目的分层解耦,使得多人协作开发的时候不需要去考虑对方的业务实现,独自开发自己的模块不受影响,可维护性增强。
MVC模式的问题
(1)Controller逻辑复杂,代码臃肿且难以测试问题
(2)View和Model并未完全分离,View是强依赖特定的Model
二、MVP(Model-View-Presenter)
模型(Model):业务模型(数据库操作、文件访问等)
视图(View):交互的界面,如Web前端(HTML/CSS/Java Script)
展示器(Presenter):连接模型和视图,处理视图的请求并根据模型更新视图。
.NET程序员熟知的ASP.NET webform、winform基于事件驱动的开发技术就是使用的MVP模式。控件组成的页面充当View,实体数据库操作充当Model,而View和Model之间的控件数据绑定操作则属于Presenter。控件事件的处理可以通过自定义的IView接口实现,而View和IView都将对Presenter负责。
总结
MVP用展示器代替了控制器,而展示器是可以直接更新视图,所以MVP中展示器可以处理视图的请求并递送到模型又可以根据模型的变化更新视图,实现了视图和模型的完全分离。
三、MVVM(Model-View-ViewModel)
MVVM可以看作是一种特殊的MVP(Passive View)模式,或者说是对MVP模式的一种改良
模型(Model):业务模型(数据库操作、文件访问等)
视图(View):交互的界面,如Web前端(HTML/CSS/Java Script)
视图模型(ViewModel):连接模型和视图,通过数据绑定实现数据更新
MVVM的调用关系和MVP一样。但是,在ViewModel当中会有一个叫Binder,或者是Data-binding engine的东西。以前全部由Presenter负责的View和Model之间数据同步操作交由给Binder处理。
这方面典型的应用有.NET的WPF,JS框架Vue,React等。
总结
MVVM把View和Model的同步逻辑自动化了。以前Presenter负责的View和Model同步不再手动地进行操作,而是交由框架所提供的Binder进行负责。只需要告诉Binder,View显示的数据对应的是Model哪一部分即可