MVVM是什么

作者: Niuszeng | 来源:发表于2017-03-24 16:05 被阅读477次

    前言

    相信你看到这篇文章的时候,已经在网上查阅过不少资料,对MVVM有个大概了解,但概念并不清晰。此文不长,但希望能为你理解MVVM尽绵薄之力。

    当我们将要去接触或者使用一门新技术时,最重要的是:怎么用,为什么要这么用?所谓知其然必知其所以然。曾经和一个有着多年开发经验的老手讨论时,他说MVVM是对MVC的一种颠覆。我知道这可能只是一个人用词的准确度问题,虽然我并没有打断他,很认真的听他说完,感觉得出来他会使用,只是可能没有尝试过自己去设计这样一个架构,因为我并不赞同“颠覆”一词。So,what is MVVM?

    什么是MVVM?

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


    MVC简要

    如果你做过iOS开发,相信你对这几个东西一定很熟:Model、View、Controller,分别表示数据、视图、控制器。当然,其他方向的开发人员应该不也会太陌生,其实这只是一种设计思想,具体用什么语言和做什么开发并不重要。所谓MVC便是这几个单词的简写,那么它们之间是怎么工作的呢?先看下图。

    Model-View-Controller - Apple Developer

    这是苹果开发者文档中摘过来的图片,表明了三者之间的关系,简单描述了三者作用

    Model:数据模型,用来存储数据

    View:视图界面,用来展示UI界面和响应用户交互

    Controller:控制器(大管家角色),监听模型数据的改变和控制视图行为、处理用户交互

    他们工作和关系看起来是如此清晰,是一种非常好的设计思想,是的,首先声明MVC是一个非常好的架构思想,你必须要掌握。


    MVVM简要

    既然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值得用么?

    个人非常推荐使用,并且可以直接在你现有的MVC基础上进行扩展,我们首先来看下优缺点

    优点:

            1.Controller清晰简洁: ViewModel分离了大部分Controller代码,更加清晰和容易维护。

            2.方便测试:开发中大部分Bug来至于逻辑处理,由于ViewModel分离了许多逻辑,可以对ViewModel构造单元测试。

            3.开发解耦(举两个例子):

                    a.一人负责逻辑实现、另一人负责UI实现;

                    b.敏捷开发时,会发经常发不是等后端做好了接口我们再去开发,不过在没有接口的情况下通常我们可以把Controller和View完成。

    缺点:

            1.看起来代码会比MVC多点

            2.需要对每个Controller实现绑定,如果处理不好,反而会有一种“画虎不成反类犬”的感觉

    总结

    在我实际使用过程中,MVVM写出的代码量并不比MVC的少,有时反而还会多点,毕竟多了一个数据绑定过程,但逻辑会清晰很多,对于多人开发的团队,还是有不少优势的,缺点和优点相比不值一提,总之推荐使用

    当然,说了这么多全是理论的东西,没有任何代码和演示,你可能都困了,至于代码我就不列举了,GitHub上有很多案例,这里推荐两个C-41MVVMTest

    参考资料:

    谈谈MVC和MVVM 

    Introduction to MVVM 

    Model-View-Controller - Apple Developer 

    相关文章

      网友评论

        本文标题:MVVM是什么

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