大白话理解--MVVM

423 阅读2分钟

什么是MVVM?

MVVM是MVC的增强版,实质上和MVC没有本质区别,只是代码的位置变动而已,这是我对MVVM的定义,如果你不知道什么是MVC,请看下我之前的博客

《浅析MVC》-面包块而不是面条

简单描述下MVC三者作用

  • Model:数据模型,用来存储数据
  • View:视图界面,用来展示UI界面和响应用户交互
  • Controller:控制器(大管家角色),监听模型数据的改变和控制视图行为、处理用户交互他们工作和关系看起来是如此清晰

是的,首先声明MVC是一个非常好的架构思想,你必须要掌握。

进入正题

既然MVC这么好,那为什么还要使用MVVM?我们先来看一下MVVM是什么。

Model-ViewModel-View-Controller

上图描述了MVVM一个基本结构,看到了什么,是不是发现比MVC架构中多了一个ViewModel,没错,就是这个ViewModel,他是MVVM相对于MVC改进的核心思想。在开发过程中,由于需求的变更或添加,项目的复杂度越来越高,代码量越来越大,此时我们会发现MVC维护起来有些吃力,首先被人吐槽的最多的就是MVC的简写变成了Massive-View-Controller(意为沉重的Controller)由于Controller主要用来处理各种逻辑和数据转化,复杂业务逻辑界面的Controller非常庞大,维护困难,所以有人想到把Controller的数据和逻辑处理部分从中抽离出来,用一个专门的对象去管理,这个对象就是ViewModel,是Model和Controller之间的一座桥梁。当人们去尝试这种方式时,发现Controller中的代码变得非常少,变得易于测试和维护,只需要Controller和ViewModel做数据绑定即可,这也就催生了MVVM的热潮。

MVVM的优缺点

优点

  • 提高可维护性。解决了MVP大量的手动View和Model同步的问题,提供双向绑定机制。提高了代码的可维护性
  • 简化测试。因为同步逻辑是交由Binder做的,View跟着Model同时变更,所以只需要保证Model的正确性,View就正确。大大减少了对View同步更新的测试 缺点
  • 过于简单的图形界面不适用,或说牛刀杀鸡
  • 对于大型的图形应用程序,视图状态较多,ViewModel的构建和维护的成本都会比较高
  • 数据绑定的声明是指令式地写在View的模版当中的,这些内容是没办法去打断点debug的。