MVVM和MVC和MVP

MVC (Model View Controller)

  1. View 传送指令到 Controller
  2. Controller 完成业务逻辑后,要求 Model 改变状态
  3. Model 将新的数据发送到 View,用户得到反馈

MVC有两个很明显的问题:

1.m层和v层直接打交道,导致这两层耦合度高

2.因为所有逻辑都写在c层,导致c层特别臃肿

MVP (Model-View-Presenter)

MVP 是从经典的模式MVC演变而来,它们的基本思想有相通的地方:Controller/Presenter负责逻辑的处理,Model提供数据,View负责显示。

特点:

1. 各部分之间的通信,都是双向的。

2. View 与 Model 不发生联系,都通过 Presenter 传递,可以更高效地使用模型。

3. View 非常薄,不部署任何业务逻辑,称为"被动视图"(Passive View),即没有任何主动性,而 Presenter非常厚,所有逻辑都部署在那里。

4. 我们可以将一个Presenter用于多个视图,而不需要改变Presenter的逻辑。这个特性非常的有用,因为视图的变化总是比模型的变化频繁。

缺点:

由于对视图的渲染放在了Presenter中,所以视图和Presenter的交互会过于频繁。还有一点需要明白,如果Presenter过多地渲染了视图,往往会使得它与特定的视图的联系过于紧密。一旦视图需要变更,那么Presenter也需要变更了。比如说,原本用来呈现Html的Presenter现在也需要用于呈现Pdf了,那么视图很有可能也需要变更。

从上图可以看出,Presenter是Model和View之间的桥梁,为了让结构变得更加简单,View并不能直接对Model进行操作,这也是MVP与MVC最大的不同之处。

MVP模式的作用:

  • 分离了视图逻辑和业务逻辑,降低了耦合

  • Activity只处理生命周期的任务,代码变得更加简洁

  • 视图逻辑和业务逻辑分别抽象到了View和Presenter的接口中去,提高代码的可阅读性

  • Presenter被抽象成接口,可以有多种具体的实现,所以方便进行单元测试

  • 把业务逻辑抽到Presenter中去,避免后台线程引用着Activity导致Activity的资源无法被系统回收从而引起内存泄露和OOM

MVVM (Model-View-ViewModel)

MVVM 模式将 Presenter 改名为 ViewModel.

MVVM是web前端的一种非常流行的开发模式,利用MVVM可以是我们的代码更专注于处理业务逻辑而不是像jquery去更关心DOM操作。目前著名的MVVM框架有VUE、angular等,这些框架各有千秋,但是实现的思想大致上是相同的:数据绑定+视图刷新。跟MVC一样,主要目的是分离视图(View)和模型(Model)。View可以独立于Model的变化和修改,一个ViewModel可以绑定到不同的View上,当View变化的时候Model可以不变,当Model变化时View也可以不变,在MVVM中,数据是核心,由于ViewModel与View之间的双向绑定,操作了ViewModel中的数据(当然只能是监控属性),就会同步到DOM,我们通过DOM事件监控用户对DOM的改动,也会同步到ViewModel。

猜你喜欢

转载自blog.csdn.net/qq_42164670/article/details/88929688