什么是MVVM?
MVVM(Model-View_ViewModel)是一种软件架构设计模式,由微软WPF(用于替代WinForm,以前就是用这个技术开发桌面应用程序的)和Silverlight(类似于Java Applet,简单点说就是在浏览器上运行的WPF)的架构师KenCooper 和Ted Peters 开发,是一种简化用户界面的事件驱动编程方式。由John Gossman (同样也是WPF和Silverlight的架构师)于2005年在他的博客上发表
MVVM 源自经典的MVC (Modle-View-Controller)模式。MVVM 的核心是ViewModel 层,复杂转换Model 中的数据对象来让数据变得更容易管理和使用,其作用如下:
-
该层向上与视图层进行双向数据绑定
-
向下与Model 层通过接口请求进行数据交互
为什么要使用MVVM?
MVVM 模式和MVC模式一样,主要目的是分离视图(View)和模型(Model),有几大好处:
-
低耦合性:视图(View)可以独立于Model 变化和修改,一个ViewModel 可以绑定到不同的View 上,当View 变化的时候Model 可以不变,当Model 变化的时候,View 也可以不变
-
可复用: 我们可以把一些视图逻辑放在一个View Model 里面,让很多View 重用这段视图逻辑
-
独立开发:开发人员可以专注于业务逻辑和数据的开发(ViewModel),设计人员可以专注于页面设计
-
可测试: 界面素来是比较难于测试的,而现在测试可以针对ViewModel 来写。
MVVM 模式的实现者?
-
Model:模型层,在这里表示JavaScript 对象
-
View:视图层,在这里表示DOM (HTML 操作的元素)
在MVVM 架构中,是不允许数据和视图直接通信的,只能通过ViewModel 来通信,而ViewModel 就是定义了一个Observer 观察者
-
ViewModel 能够观察到数据的变化,并对视图对应的内容进行更新
-
ViewModel 能够监听到视图的变化,并能够通知数据发生改变
至此,就明白了,Vue.js 就是一个MVVM的实现者,它的核心就是实现了DOM 监听与数据绑定。