Android MVVM

536 阅读3分钟

一、MVVM到底是什么?

MVVM,是Model、View、ViewModel三者的缩写,它是一种程序的设计框架,是一种设计思路。不同的人实现MVVM,所用的构成技术、实现以后的性能都是不一样的。他其实就是由一系列代码(或技术)构成的一个程序的底座。我们在良好底座上开发出来的程序稳定性更高,可扩展性更强。

下面我们挨个来来说Model、View、ViewModel。

Model:实体模型、数据的获取、存储等等

View:Activity、fragment、view、adapter、xml等等

ViewModel:负责完成View与Model间的交互和业务逻辑,基于DataBinding改变UI

1.Model:数据提供。

Model在程序中专门用于提供数据,不管是网络请求获得的数据,还是数据库获得的数据,统统写在Model里。Model层独立性相当强,它只用来提供数据,而不管数据是用来做什么的。

2.View:视图元素和视图元素初始化。

View在Android中指代的就是我们常见的布局文件和Activity中的元素初始化部分。总之,所有一切我们在Android上肉眼能看见的东西都是View。在View层里,我只对UI做初始化,比如将TextView设置字体大小,为Banner控件设置滚动速度等等,这些大多可以直接在布局文件中完成。

3.ViewModel:操作业务数据,并将数据呈现在View上。

ViewModel根据业务需要,从Model层调取相关数据,然后更新View层相关元素。

image.png

image.png

二、MVVM优缺点

首先我们要说一下,使用MVVM后,程序会有哪些变化:

1.MVVM并不会提升程序的性能,甚至如果用不好还会降低性能。

2.MVVM会增大代码的总量。

3.阅读MVVM的代码你必须不停的跳来跳去,可阅读性降低。

4.MVVM将让你的程序完全解耦。

三、MVVM的核心DataBinding

首先我们要知道DataBinding使用了apt技术,我们build项目时DataBinding会生成多个文件.

DataBinding将原有的layout和data标签去除了。并为根布局声明了一个layout/文件名_0的tag,为其他使用到@{}或@={}的控件按顺序添加了一个binding_X的tag
该配置文件中详细的记述了 我们声明的全局变量,变量指向的数据类型的绝对路径。tag对应的View类型。控件绑定具体属性和Model中的具体属性。true是否是双向的。

它就是将布局中的含有databinding赋值的tag控件一一存入bindings的Object的数组中并返回。

当((dirtyFlags & 0xeL) != 0)或((dirtyFlags & 0xdL) != 0)成立时就会把Model中的数据set到相应的View中,这个就是单向的M->V。((dirtyFlags & 0x8L) != 0)成立时就是V->M它为双向绑定的控件添加了一个内容变化的监听mboundView1androidTextAttrChanged.

DataBinding通过布局中的tag将控件查找出来,然后根据生成的配置文件将V与M进行对应的同步操作,设置一个全局的布局变化监听来实时更新,M通过他的set方法进行同步。



作者:TianFB
链接:www.jianshu.com/p/6ea1e51b8… 来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。



作者:废文鉴定师
链接:www.jianshu.com/p/609ccba5d… 来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。