MVVM

133 阅读2分钟

juejin.im/post/5e1b31…

MVVM框架:VUE、Angular

双向绑定

单向绑定非常简单,就是把Model绑定到View,当我们用JavaScript代码更新Model时,View就会自动更新。

常见库实现数据双向绑定的做法:

  • 数据劫持(Vue.js)

MVVM 的描述

MVVM 设计模式,是由 MVC(最早来源于后端)、MVP 等设计模式进化而来。

  1. M - 数据模型(Model),简单的JS对象
  2. VM - 视图模型(ViewModel),连接Model与View
  3. V - 视图层(View),呈现给用户的DOM渲染界面

通过以上的MVVM模式图,我们可以看出最核心的就是ViewModel,它主要的作用:对View中DOM元素的监听和对Model中的数据进行绑定,当View变化会引起Modal中数据的改动,Model中数据的改动会触发View视图重新渲染,从而达到数据双向绑定的效果,该效果也是Vue最为核心的特性。

这就是MVVM的设计思想:关注Model的变化,让MVVM框架去自动更新DOM的状态,从而把开发者从操作DOM的繁琐步骤中解脱出来!

react不是MVVM框架

1.react整体是函数式的思想,把组件设计成纯组件,状态和逻辑通过参数传入,所以在react中,是单向数据流,推崇结合immutable来实现数据不可变。

而vue是响应数据,也就是基于数据改变的,通过对每一个属性建立Watcher来监听,当属性变化的时候,响应式的更新对应的虚拟dom。

2.并不是,它只是一个 view 层,并没有与任何的 model 进行绑定。

如果用上了 MobX 就是 MVVM 了。

MVC & 三层架构

下面以Java为例,分别阐述下MVC和三层架构中各层代表的含义以及职责:

  1. Model:模型层,代表着每一个JavaBean。其分为两类,一类称为数据承载Bean,一类称为业务处理Bean。
  2. View:视图层,代表着对应的视图页面,与用户直接进行交互。
  3. Controller:控制层,该层是Model和View的“中间人”,用于将用户请求转发给相应的Model进行处理,并处理Model的计算结果向用户提供相应响应。

以登录为例,介绍一下三层之间的逻辑关系。当用户点击View视图页面的登录按钮时,系统会调取Controller控制层里的登录接口。一般在Controller层中不会写很多具体的业务逻辑代码,只会写一个接口方法,该方法具体的逻辑在Service层进行实现,然后service层里的具体逻辑就会调用DAO层里的Model模型,从而达到动态化的效果。