MVC
MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写。
- Model是指数据模型,是对客观事物的抽象。主要是数据、业务逻辑和业务规则。
- View是指视图,也就是呈现给用户的一个界面。
- Contorller指的是控制器,主要负责与model和view打交道。负责用户的请求和响应。
这一个设计,相信很多人都用过spring-mvc,这个框架就是mvc模式的一种实现,就不多说了。
MVVM
MVVM是Model-View-ViewModel的简写,本质上就是MVC 的改进版,即模型-视图-视图模型。
- Model,同mvc模式的模型层一样,是后端传递的数据。
- View,视图层。
- ViewModel,mvvm模式的核心,它是连接view和model的桥梁。
ViewModel既然是核心,那么肯定有着至关重要的作用,有两个方向:
1、将Model转换成View,实现方式是数据的绑定。
2、将View转换成Model,将页面转换成后端的数据,实现方式是DOM 事件监听。
以上的两个方向称为数据双向绑定。所以说在MVVM模式中,视图和模型层是不能直接通信的,都是通过ViewModel来建议通信。ViewModel通过观察者来监听数据的变化。
MVVM 将其中的View 的状态和行为抽象化,让我们将视图 UI 和业务逻辑分开,这个不用我们管,人家已经做好了。
MVVM相比较MVC而言,做到了数据响应式编程,将UI和数据解耦。优点:
- 低耦合。ViewModel可以绑定到不同的"View"上,当View变化的时候Model可以不变,当Model变化的时候View也可以不变。
- 可重用性。可以把多个视图逻辑放在一个ViewModel里面,让很多view重用这段视图逻辑。
MVVM在一定程度上增加了系统结构的实现的复杂性,View依赖于特定的Model,无法组件化,视图与控制器之间的联系过于紧密,难以独立运用。
常见的MVVM框架有React,Vue,Angular。在前端来说,特别流行。
MVP
MVP是Model-View-Presenter的缩写,Model提供数据,View负责显示,Presenter负责逻辑的处理。在MVP中View并不直接使用Model,它们之间的通信是通过Presenter (MVC中的Controller)来进行的,所有的交互都发生在Presenter内部。
可以看出,MVP通过Presenter把Model和View进行了分离,主要的程序逻辑交给了Presenter实现。
- Presenter也指交互中间人。作为沟通View和Model的桥梁,它从Model层检索数据后,返回给View层,使得View和Model之间没有耦合,也将业务逻辑从View角色上抽离出来。
优点:
- 模型与视图完全分离,修改视图而不影响模型。
- 可以将一个Presenter用于多个视图,而不需要改变Presenter的逻辑。
- 便于测试。
但是MVP的明显缺点是增加了代码的复杂度,代码中会存在大量的视图和模型切换同步代码,会导致Presenter臃肿,维护困难。
MVP通常是应用于安卓的开发模式。
你们还接触过其他的编程通信模式吗?