聊一聊基本的MVVM设计思想

作者: Srtian | 来源:发表于2018-05-22 23:41 被阅读103次

一、为什么我们需要MVVM

在写界面时,我们经常会碰到一些功能,需要数据生成页面,然后页面通过输入控件收集的数据的改变,经过改变后再次更新页面。就比如一个数组和一个页面上的列表,我们通常会需要这个数组与列表相对应,当数组改变时,页面中的列表可以发生改变。而当列表发生改变时,数组可以通过输入控件,将数据进行改变然后再渲染页面上的列表。

整个这个过程,说起来很绕口,其实归纳来看,就在做两件事:

  • 根据数据的变动,生成或者变更界面
  • 根据界面的操作,变更数据。

既然已经将它们的操作过程归纳起来了,那么如果我们引入一种绑定关系,通过一系列的配置过程后,使得以后的每次数据发生变更时,页面也会发生相应的更新;而页面上的操作也会自动更新到数据。这会让我们开发变得更为方便,有老婆孩子的可以省下时间去陪老裴孩子,没老婆孩子的可以省下时间去打游戏(没错,我就是后者,泪奔~)。而MVVM就是提供了这么一套配置,为我们建立了数据和界面的关联关系。

二、 MVVM的构成

MVVM的全名是Model-View-ViewModel,它的基本思路就是这样:

imageimage

它分为三部分:

  • Model
  • View
  • ViewModel

2.1 Model

model很好理解,就是指数据层,是纯净的数据。对于前端来说,model往往是一个简单的对象。比如这样:

{
    name: "srtian",
    age: 22,
    like: {
        sports: ["football", "run"],
        music: "You're Beautiful"
    }
}

简单来说,数据层就是我们要渲染后呈现给用户的数据,数据层本身是可变的,且不用承担逻辑操作和计算的功能。

2.2 View

View也很简单,就是指视图层,也就是直接呈现给用户的那部分,对前端就是HTML。比如上面的数据层,它所对应的视图层可能是这样的:

<div>
  <p>
    <b>name: </b>
    <span>srtian</span>
  </p>
  <p>
    <b>age: </b>
    <span>22</span>
  </p>
  <ul>
    <li>football</li>
    <li>run/li>
  </ul>
  <ul>
    <li>You're Beautiful</li>
  </ul>
</div>

当然视图层并不是固定的,而是可变的,我们可以随意的添加元素。而这在MVVM中并不会改变数据层,而是改变了视图层呈现数据的方式。同时需要注意的是,视图层应该和数据层完成分离。

2.3 ViewModel

既然视图层应该和数据层相分离,那么我们就需要设计一种结构,让他们建立起某种联系,Vue官网上的这张图就很好的解释了ViewModel的作用:

imageimage

抛开ViewModel本身带有的一些属性外,ViewModel本身其实主要是做了两件事:

  • 从Model到View的映射,也就是Data Binding。这样可以大量省略我们手动update View的代码和时间。
  • 从 View 到 Model 的事件监听,也就是DOM Listeners。这样我们的 Model 就会随着 View 触发事件而改变。

三、小结

综上所述,我们知道了MVVM所包含的Model,View,ViewModel三层,在实践的时候,主要包含几个要点:

  • 以不同的角色分别考虑每个层次,划定它们所负责的范围
  • 先划分Model和View,最后考虑ViewModel,利用ViewModel将其两者联系起来。

参考资料:
https://zhuanlan.zhihu.com/p/24475845

相关文章

  • 聊一聊基本的MVVM设计思想

    一、为什么我们需要MVVM 在写界面时,我们经常会碰到一些功能,需要数据生成页面,然后页面通过输入控件收集的数据的...

  • 聊一聊编程思想

    说的编程思想,我们很多人大概都听过什么函数式编程、链式编程、响应式编程这三种编程思想,可能有些人不太清楚。之前我也...

  • 我们聊一聊设计

    什么是设计? 什么是设计?做了这么多年的设计,你有没有被这一句话,仿佛进入夜深人静的时刻,展开深入骨髓的思索。 前...

  • vue的ms题目

    1、什么是 mvvm? MVVM 是 Model-View-ViewModel 的缩写。mvvm 是一种设计思想。...

  • MVC和MVVM

    来聊一聊我理解中的MVC和MVVM MVC的定义: MVC(Model View Controller)是构建iO...

  • VUE面试题

    一、什么是MVVM?MVVM是Model-View-ViewModel的缩写。MVVM是一种设计思想。Model ...

  • Vue.js面试题整理

    一、什么是MVVM?MVVM是Model-View-ViewModel的缩写。MVVM是一种设计思想。Model ...

  • Swift+Redux

    在聊Redux之前,我们先回顾一下之前我们使用过的设计模式MVC,MVVM,MVP,VIPER。如图所示,由于这些...

  • vue入门

    MVVM的介绍 vue的设计思想是基于MVVM实现的,那么什么是MVVM呢?简单介绍: 组成 MVVM ===> ...

  • 聊一聊具体的设计思路

    我自己本身是做UI设计的,实际工作中除了app设计,也经常需要做运营活动、lp、物料、插画、动效~真的是无所不做呀...

网友评论

本文标题:聊一聊基本的MVVM设计思想

本文链接:https://www.haomeiwen.com/subject/oelljftx.html