MVVM和DataBinding
印尼钱包可能采用新的开发模式,所以今天了解一下MVVM和DataBinding。
目前的Android程序结构,常见下面三种开发模式:
MVC:
View:对应于xml布局文件
Model:实体模型
Controllor:对应于Activity业务逻辑,数据处理和UI处理
但是XML的View功能太弱,很多视图都要放在Activigy中完成,Activity还承担一些控制逻辑。所以Activity就成了View+Controller。
MVP:
View: 对应于Activity和xml,负责View的绘制以及与用户交互
Model: 实体模型
Presenter: 负责完成View于Model间的交互和业务逻辑
这样的话Activity就能成为真正的View而不是View和Control的合体,Activity只做UI相关的事。但是Activity需要实现各种跟UI相关的接口,同时要在Activity中编写大量的事件,然后在事件处理中调用presenter的业务处理方法。
MVVM:
View: 对应于Activity和xml,负责View的绘制以及与用户交互
Model: 实体模型
ViewModel: 负责完成View于Model间的交互,负责业务逻辑
MVVM的目标和思想MVP类似,利用数据绑定(Data Binding)、依赖属性(Dependency Property)、命令(Command)、路由事件(Routed Event)等新特性,打造了一个更加灵活高效的架构。
MVVM有这样几个优点:
- 数据驱动(ViewModel只要关注数据和业务逻辑,不需要和UI或者控件打交道)
- 低耦合度(数据是独立于UI的,ViewModel只负责处理和提供数据,控件变了也无所谓)
- 更新UI(可以在工作线程中直接修改View Model的数据,剩下的DataBinding搞定)
- 可复用性(一个View Model复用到多个View中,同样的一份数据,用不同的UI去做展示)
DataBinding
MVVM是舶来品,从Web前端的Argular而来,Angular有DataBind功能。
Android之前也有一些库比如RoboGuice、ButterKnife实现了类似DataBind的依赖注入框架实现了类似的功能。
今年4月Android UI团队发布了一个DataBinding的库。
是不是能应用到印尼钱包中呢。明天我再了解一下。
Reference:
[1]https://realm.io/cn/news/data-binding-android-boyar-mount/