# MVVM

# 1、MVC

先看一下MVC

将整个前端页面分成View,Controller,Modal,视图上发生变化,通过Controller(控件)将响应传入到Model(数据源),由数据源改变View上面的数据。

整个过程看起来是行云流水,业务逻辑放在Model当中,页面渲染逻辑放在View当中,但在实际运用上却存在一个问题:那就是MVC框架允许View和Model直接进行通信!!

换句话说, View和Model之间随着业务量的不断扩大,会出现非常复杂的难以处理的依赖关系,完全背离了开发所应该遵循的开放封闭原则。为了解决这个问题,MVVM出现了。

# 2、MVVM

MVVM和MVC的主要区别有2点

  1. 数据和视图之间是分离的, 不直接通信
  2. 通过数据模型来驱动视图,开发者只需要关注数据变化, DOM操作被封装了。

MVVM分别指View,Model, ViewModel。View通过ViewModel的Dom Listeners将时间绑定到Model上,Model通过ViewModel的Data Bindings来管理视图, ViewModel则起到其中一个连接的作用。

# 3、MVVM的实现原理

以Vue举例,主要有三个核心的点

  1. 响应式。Vue监听data的属性变化。defineProperty或者Proxy
  2. 模板渲染。模板解析成一个渲染函数, 渲染函数的作用域上下文就是当前Vue实例,可以读取到Model的数据。
  3. 渲染。模板渲染成DOM

# 4、Vue

MVVM全称Model View ViewModel,分别指“数据模型层、“视图层”、“用于视图的数据模型层”。

1.出于特别场景方便的目的,Vue允许通过指令、$refs等直接操作DOM,而不是完全通过MVVM模式要求的ViewModel自动映射View。只不过建议克制。

2.Vue的实例是一个ViewModel,简单场景下直接吞并了Model的存在。在全局状态的场景下,Vuex可以视为半个Model。没有Model的MVVM,是不完整的。

上次更新: 12/19/2025, 9:03:41 AM