android MVVM开发模式
mvvm 是一个在 mvp 架构上修改,目标是将view的一些更改,跟model关联起来,使得model的数据改变,直接通知到view上面来,从而解决mvp架构里面的v-p之间的接口太重问题。
所以mvvm的核心解决问题为:使得v-p直接的关系弱化,使用绑定方式(dataBinding)直接将model的改变反馈到view上面。
关于完整的dataBinding讲解,请看这里
https://github.com/LyndonChin/MasteringAndroidDataBinding
本讲解决什么问题呢?一个方面是简单的使用dataBinding方式,一个是讲解它内部如何做到的。
mvvm的含义:
说多无益,直接看例子:
加入dataBinding
里面有一个属性name,我们等会要用。
现在我们捋一捋这个思路。
第一个参数便是我们的TextView类,第二个值我们看到是从上面的User的实例出getName的值。 第一个参数如何来的:
改变setContentView单一动作,换为DataBindingUtil.setContentView。上面已经提过这个的思路。
注意:绑定的编译处理过程我们不管,我们把它当做黑盒子处理,看下它处理我们的布局xml的前后对比。
这里我们看到在data节点标记了名字和类型,然后底下的去用这个名字里面的属性。我们发现,这里我们只需要约定下这个关联方法,这个就完全可以自动生成了。
因此,我们默认属性的获取都是通过get得到。这里user.name就变成uset.getName() 关于这个android:text属性呢,默认就是对应的set方法了,这里没有使用默认的,why?因为为了严谨,需要做赋值过滤。系统默认提供了具体方法:
我们看下这个布局和生成的布局之间的对比:
生成的时候直接将上面的layout和data拿掉了。将android:text也去掉了,这些去哪里呢?(答案就是这个布局xml生成一个真正的布局文件和一个管理绑定的代码啦,这里就是ActivityMainBinding)
ActivityMainBinding 主要完成几件事情 1:将里面的需要绑定的view实例拿到。 2:将view和model的关联代码生成出来。(也就是model该如何显示到view上)
说了这么多,再一次总结下databinding做了什么:
依据约定的xml(layout作为根节点),生成真正的xml和一个绑定类,绑定类为我们做了界面里面的View和数据之间更新的规则。
然后我们用DataBindingUtil.setContentView 替换setContentView,因为它在setContentView的基础上做了一个动作,就是把这个界面里面的View和数据之间更新的规则直接交给我们的绑定类。
如此一来,我们发现我们要写的findviewbyid 和setText 被这个工具自动生成出来了,我们将这些动作写入了布局里面,让工具帮我们做了代码生成,从而让我们解放了繁琐重复的界面操作。
好吧,先这么多,这个架构要写的太多,敬请期待。