MVC和MVVM的区别

MVC

MVC是模型(Model)、视图(View)、控制器(Controller)的简写,是一种软件设计规范,是将业务逻辑、数据、显示分离的方法来组织代码。

主要作用是降低了视图与业务逻辑间的双向耦合。

MVC不是一种设计模式,MVC是一种架构模式。


M(Model):模型层,应用程序中用来处理程序数据逻辑的部分,负责在数据库中存取数据。

V(View):视图层,应用程序中用来显示数据的部分,视图可以显示模型层查出来的数据,一般就是我们见到的用户界面,客户想看到的

西。

C(Controller):控制层,应用程序中用来处理用户交互的部分。控制器接收用户的输入,并调用模型去处理用户的输入,之后将处理的结果显示到视图上,展示给用户查看。

image

MVC架构的特点

  • View也可以与Model直接进行交互,上图没有画,可以脑补Model也有一条虚线指向View。
  • Controller是基于行为的,并且可以被多个View共享,负责决定显示哪个View。

MVC架构的缺点

主要有两个:

  • View对Model的依赖,会导致View中也会包含业务逻辑。
  • Controller中的代码会随着业务的增加变得异常臃肿。

还有一种设计架构叫做MVP,是MVC的一个演变模式,它将Controller换成了Presenter,Presenter负责完成View于Model间的交互,主要是解决了上述的第一个缺点,但第二个缺点依旧没有解决。

MVP模式限制了Model和View之间通信,让Model和View解耦更彻底,代码更容易被复用。它的问题在于Presenter的负担很重,Presenter需要知道View和Model的结构,并且在Model变化时候需要手动操作View,增加编码负担,降低了代码的维护性。


MVVM

MVVM是模型(Model)、视图(View)、视图模型(ViewModel)的简写,它本质上就是MVC的改进版。

MVVM采用双向数据绑定。View中数据变化将自动反映到ViewModel上。

反之,Model中数据变化也将会自动展示在页面上。

把Model和View关联起来的就是ViewModel。

ViewModel负责把Model的数据同步到View显示出来,还负责把View的修改同步回Model。


M(Model):模型层,就是业务逻辑相关的数据对象,通常从数据库映射而来。和上述MVC的Model相对应。

V(View):视图层,用来展示用户界面。和上述MVC的View相对应。

VM(ViewModel):视图模型层,连接View和Model的桥梁。由MVC的Controller演变而来。因为Model层中的数据不能直接跟View中的视图控件一一对应,所以就需要ViewModel来将Model封装成View可以接收和显示的界面数据对象。

image

MVVM的优点

1、低耦合

  • 视图(View)可以独立于Model变化和修改,一个ViewModel可以绑定到不同的View上,当View变化的时候Model可以不变,当Model变化的时候View也可以不变。

2、可重用性

  • 可以把一些视图逻辑放在一个ViewModel里面,让很多View重用这段视图逻辑。

3、独立开发

  • 开发人员可以专注于业务逻辑和数据的开发(ViewModel),设计人员可以专注于页面设计。

4、可测试性

  • 界面素来是比较难于测试的,而现在测试可以针对ViewModel来写。

5、⾃动更新DOM

  • 利⽤双向绑定 , 数据更新后视图⾃动更新 , 让开发者从繁琐的⼿动更新DOM中解放。

MVVM的缺点

  • Bug 很难被调试,因为使⽤双向绑定的模式,当你看到界⾯异常了,有可能是你 View 的代码有 Bug ,也可能是 Model 的代码有问题。数据绑定使得⼀个位置的Bug 被快速传递到别的位置,要定位原始出问题的地⽅就变得不那么容易了。另外,数据绑定的声明是指令式地写在View 的模版当中的,这些内容是没办法去打断点debug的。
  • ⼀个⼤的模块中 model 也会很⼤,虽然使⽤⽅便了也很容易保证了数据的⼀致性。但是⻓期持有,不释放内存就会花费更多的内存。
  • 对于⼤型的图形应⽤程序,视图状态较多, ViewModel 的构建和维护的成本都会⽐较⾼。
posted @ 2022-11-23 10:08  笔下洛璃  阅读(645)  评论(0编辑  收藏  举报