这三个框架中,M 和 V 指的都是 Model层和 View层,但是其功能会因为框架的不同而变化,
- Model层:储存数据
- View层:展示数据
MVC
MVC框架图(实线表示调用和、虚线表示通知)
MVC 中的 C 指的是 Controller层。
在 Controller 层会接收用户所有的操作,并根据写好的代码进行相应的操作——触发 Model 层,或者触发 View 层,抑或是两者都触发。Controller 层触发 View 层时,并不会更新 View 层中的数据,View 层中的数据是通过监听 Model 层数据变化而自动更新的,与 Controller 层无关。
MVC框架流程图
MVC 框架主要有两个缺点:
- MVC 框架的大部分逻辑都集中在 Controller 层,代码量也都集中在 Controller 层,这带给 Controller 层很大的压力,而已经有独立处理事件能力的 View 层却没有用到。
- 还有一个问题,就是 Controller 层和 View 层之间是一一对应的,断绝了 View 层复用的可能,因而产生了很多冗余代码。
MVP
MVP框架图
MVP 中的 P 指的是 Presenter层。
在 MVC 框架中,View 层可以通过访问 Model 层来更新,但在 MVP 框架中,View 层不能再直接访问 Model 层,必须通过 Presenter 层提供的接口,然后 Presenter 层再去访问 Model 层。简单来说此时 Presenter 将数据部分与 View 完全进行了分离,通过已经写好的接口,直接完成 View 与 Presenter的通信。
- Model 层和 View 层都必须通过 Presenter 层来传递信息,所以完全分离了 View 层和 Model 层,也就是说,View 层与 Model 层一点关系也没有,双方是不知道彼此存在的,在它们眼里,只有 Presenter 层。
- 因为 View 层与 Model 层没有关系,所以 View 层可以抽离出来做成组件,在复用性上比 MVC 模型好很多。
MVP框架流程图
View 层和 Model 层都需经过 Presenter 层,致使 Presenter 层比较复杂,维护起来会有一定的问题。而且因为没有绑定数据,所有数据都需要 Presenter 层进行“手动同步”,代码量比较大,虽然比 MVC 模型好很多,但也是有比较多的冗余部分。
MVVM
MVVM框架图
MVVM 中的 VM 指的是 ViewModel层。
在 MVVM 框架中,ViewModel层双向绑定了 View层 和 Model层,因此 只要VIew层的数据变化,系统会自动修改 Model 层的数据,反之同理。ViewModel,它是 View 界面的延伸,也是前端工作的延伸,可以理解为通过一个前端后台完成与数据的交互。而 Presenter 层是采用手动写方法来调用或者修改 View 层和 Model 层。
MVVM框架流程图
双向数据绑定,可以这样理解:双向数据绑定是一个模板引擎,它会根据数据的变化实时渲染。如下图所示,View 层和 Model 层之间的修改都会同步到对方。
数据绑定概念