一、什么是MVVM?
在MVVM
框架下视图和模型是不能直接通信的,只能通过ViewModel
进行交互,它能够监听到数据的变化,然后通知视图进行自动更新,而当用户操作视图时,VM
也能监听到视图的变化,然后通知数据做相应改动,这实际上就实现了数据的双向绑定。并且V
和VM
可以进行通信。
Model
(模型)
模型是指代表真实状态内容的领域模型(面向对象),或指代表内容的数据访问层(以数据为中心)。
View
(视图)
就像在MVC和MVP模式中一样,视图是用户在屏幕上看到的结构、布局和外观(UI)。
ViewModel
(视图模型)
视图模型是暴露公共属性和命令的视图的抽象。MVVM没有MVC模式的控制器,也没有MVP模式的presenter,有的是一个绑定器。在视图模型中,绑定器在视图和数据绑定器之间进行通信。
优点:
-
低耦合:
View
可以独立于Model
变化和修改,一个ViewModel
可以绑定到不同的View
上,当View
变化的时候Model
可以不变,当Model
变化的时候View
也可以不变。 -
可重用性: 可以把一些视图逻辑放在一个
ViewModel
里面,让很多View
重用这段视图逻辑。 -
独立开发: 开发人员可以专注于业务逻辑和数据的开发,设计人员可以专注于页面的设计。
-
可测试:界面素来是比较难于测试的,而现在测试可以针对
ViewModel
来写。
二、什么是MVC?
MVC
是应用最广泛的软件架构之一,一般MVC分为:Model
(模型),View
(视图),Controller
(控制器)。 这主要是基于分层的目的,让彼此的职责分开.View
一般用过Controller
来和Model
进行联系。Controller
是Model
和View
的协调者,View
和Model
不直接联系。基本都是单向联系。M和V指的意思和MVVM中的M和V意思一样。C即Controller
指的是页面业务逻辑。MVC是单向通信。也就是View
跟Model
,必须通过Controller
来承上启下。
Model
(模型)表示应用程序核心(如数据库)。
View
(视图)显示效果(HTML页面)。
Controller
(控制器)处理输入(业务逻辑)。
MVC
模式同时提供了对 HTML、CSS 和 JavaScript 的完全控制。
Model
(模型)是应用程序中用于处理应用程序数据逻辑的部分。
通常模型对象负责在数据库中存取数据。
View
(视图)是应用程序中处理数据显示的部分。
通常视图是依据模型数据创建的。
Controller
(控制器)是应用程序中处理用户交互的部分。
通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。
优点:
- 低耦合
- 重用性高
- 生命周期成本低
- 部署快
- 可维护性高
- 有利软件工程化管理
三、MVC与MVVM的区别:
MVC和MVVM的区别并不是VM完全取代了C,ViewModel存在目的在于抽离Controller中展示的业务逻辑,而不是替代Controller,其它视图操作业务等还是应该放在Controller中实现。也就是说MVVM实现的是业务逻辑组件的重用。
- MVC中Controller演变成MVVM中的ViewModel
- MVVM通过数据来显示视图层而不是节点操作
- MVVM主要解决了MVC中大量的dom操作使页面渲染性能降低,加载速度变慢,影响用户体验