MVVM、MVC、MVP之间的区别

MVC、MVP及MVVM都是一种架构模式,都是用来解决界面呈现和逻辑代码分离而出现的模式。

MVC

在这里插入图片描述
实线表示调用,虚线表示事件通知。

Model:是程序需要操作的数据以及数据的处理方法。
View:它是提供给用户的操作界面。
Controller:页面的业务逻辑,接收View层传递过来的指令,选取Model层对应的数据,进行相应操作。

MVC是单向通信的。
用户对View的操作交给了Controller处理,在Controller中响应View的事件调用Model的接口对数据进行操作,一旦Model发生变化便通知相关视图进行更新。
Model和View之间使用了观察者模式,View事先在此Model上注册,进而观察Model,以便更新在Model上发生改变的数据。

缺点:view和model间存在耦合,让Controller的复用性成了问题,不能多个View共用一个Controller。

MVP

在这里插入图片描述
MVP是从MVC进化而来,即Model、View、Presenter
MVP是双向通信的。
Presenter完全把Model和View进行了分离,主要的程序逻辑在Presenter里实现。而且,Presenter与具体的View是没有直接关联的,而是通过定义好的接口进行交互,从而使得在变更View时候可以保持Presenter的不变,即重用!

优点:模型视图分离,可以只修改视图不影响模型。而且一个presenter可以用于多个视图不需要改变逻辑。
缺点:Presenter除了基本的业务逻辑外,还有大量代码需要对从View到Model和从Model到View的数据进行“手动同步”,这样Presenter显得很重,维护起来会比较困难。而且由于没有数据绑定,如果Presenter对视图渲染的需求增多,它不得不过多关注特定的视图,一旦视图需求发生改变,Presenter也需要改动。

MVVM

在这里插入图片描述
MVVM把View和Model的同步逻辑自动化了。以前Presenter负责的View和Model同步不再手动地进行操作,而是交给框架所提供的数据绑定功能进行负责,只需要告诉它View显示的数据对应的是Model哪一部分即可。

Model
在MVVM中,我们可以把Model称为数据层,因为它仅仅关注数据本身,不关心任何行为(格式化数据由View的负责),这里可以把它理解为一个类似json的数据对象。
View
和MVC/MVP不同的是,MVVM中的View通过使用模板语法来声明式的将数据渲染进DOM,当ViewModel对Model进行更新的时候,会通过数据绑定更新到View。
ViewModel
与MVP不同的是,没有了View为Presenter提供的接口,之前由Presenter负责的View和Model之间的数据同步交给了ViewModel中的数据绑定进行处理,当Model发生变化,ViewModel就会自动更新;ViewModel变化,Model也会更新。

优点:由于数据绑定,不再需要手动同步数据,可以专注于业务逻辑和数据的开发。

猜你喜欢

转载自blog.csdn.net/lixinyi0622/article/details/84992337
今日推荐