认识MVC和MVVM模式

在学习 Vue.js 之前,我们先来了解一下 MVVM(Model-View-ViewModel,模型-视图-视图模型)模式,它是一种基于前端开发的架构模式。MVVM 最早出现于 2005 年微软推出的基于 Windows 的用户界面框架 WPF,它其实是一种编程设计思想,既然是思想,就不限于在什么平台或者用什么语言开发。基于 MVVM 的诸多优点,其在当今移动和前端开发中应用得越来越广泛。

传统的MVC模式

如果读者了解 MVC(Model-View-Controller) 模式,那么 MVVM 模式应该更好理解。传统的 MVC 模式包括以下三部分:

  • 视图(View):用户界面。

  • 控制器(Controller):业务逻辑。

  • 模型(Model):数据存储。

Model 代表数据存储,主要用于实现数据的持久化;View 代表用户界面(UI),主要用于实现页面的显示;Controller 代表业务逻辑,串联起 ViewModel,主要用来实现业务的逻辑代码。在 MVC 模式中,用户的交互行为在 View 中触发,由 View 通知 Controller 去进行对应的逻辑处理,处理完成之后通知 Model 改变状态,Model 完成状态改变后,找到对应的 View 去更新用户界面的显示内容,至此完成对用户交互行为的反馈。由此可见,整个流程由 View 发起,最终在 View 中做出改变,这是一个单向的过程。当年流行的 backbone.js 就是 MVC 的典型代表。

流行的MVVM模式

MVVM 是把 MVC 中的 Controller 去除了,相当于变薄了,取而代之的是 ViewModel。所谓 ViewModel,是一个同步的 ViewModel 的对象,在前端 MVVM 中,ViewModel 最典型的作用是操作 DOM,特点是双向数据绑定(Data-Binding)。

在双向数据绑定中,开发者无须关注如何找到 DOM 节点和如何修改 DOM 节点,因为每一个在 View 中需要操作的 DOM 都会有一个在 Model 中对应的对象,通过改变这个对象,DOM 就会自动改变;反之,当 DOM 改变时,对应的 Model 中的对象也会改变。ViewModelViewModel 关联起来,因此开发者只需关注业务逻辑,不需要手动操作 DOM,这就是 ViewModel 带来的优势,如图1-1所示。

image 2024 02 20 17 44 39 384
Figure 1. 图1-1 MVVM模式

MVVM 让开发者更加专注于页面视图,从视图出发来编写业务逻辑,这也符合正常的开发流程,而 Vue.js 就是一个典型的从视图(View)出发的前端 MVVM 框架。从 Vue 的英文发音 /vju:/ 类似 View 就可以参透其中的奥秘。