MVVM和DataBinding
印尼錢包可能采用新的開發(fā)模式,所以今天了解一下MVVM和DataBinding。
目前的Android程序結(jié)構(gòu),常見下面三種開發(fā)模式:
MVC:
View:對(duì)應(yīng)于xml布局文件
Model:實(shí)體模型
Controllor:對(duì)應(yīng)于Activity業(yè)務(wù)邏輯,數(shù)據(jù)處理和UI處理
但是XML的View功能太弱,很多視圖都要放在Activigy中完成,Activity還承擔(dān)一些控制邏輯。所以Activity就成了View+Controller。
MVP:
View: 對(duì)應(yīng)于Activity和xml,負(fù)責(zé)View的繪制以及與用戶交互
Model: 實(shí)體模型
Presenter: 負(fù)責(zé)完成View于Model間的交互和業(yè)務(wù)邏輯
這樣的話Activity就能成為真正的View而不是View和Control的合體,Activity只做UI相關(guān)的事。但是Activity需要實(shí)現(xiàn)各種跟UI相關(guān)的接口,同時(shí)要在Activity中編寫大量的事件,然后在事件處理中調(diào)用presenter的業(yè)務(wù)處理方法。
MVVM:
View: 對(duì)應(yīng)于Activity和xml,負(fù)責(zé)View的繪制以及與用戶交互
Model: 實(shí)體模型
ViewModel: 負(fù)責(zé)完成View于Model間的交互,負(fù)責(zé)業(yè)務(wù)邏輯
MVVM的目標(biāo)和思想MVP類似,利用數(shù)據(jù)綁定(Data Binding)、依賴屬性(Dependency Property)、命令(Command)、路由事件(Routed Event)等新特性,打造了一個(gè)更加靈活高效的架構(gòu)。
MVVM有這樣幾個(gè)優(yōu)點(diǎn):
- 數(shù)據(jù)驅(qū)動(dòng)(ViewModel只要關(guān)注數(shù)據(jù)和業(yè)務(wù)邏輯,不需要和UI或者控件打交道)
- 低耦合度(數(shù)據(jù)是獨(dú)立于UI的,ViewModel只負(fù)責(zé)處理和提供數(shù)據(jù),控件變了也無所謂)
- 更新UI(可以在工作線程中直接修改View Model的數(shù)據(jù),剩下的DataBinding搞定)
- 可復(fù)用性(一個(gè)View Model復(fù)用到多個(gè)View中,同樣的一份數(shù)據(jù),用不同的UI去做展示)
DataBinding
MVVM是舶來品,從Web前端的Argular而來,Angular有DataBind功能。
Android之前也有一些庫比如RoboGuice、ButterKnife實(shí)現(xiàn)了類似DataBind的依賴注入框架實(shí)現(xiàn)了類似的功能。
今年4月Android UI團(tuán)隊(duì)發(fā)布了一個(gè)DataBinding的庫。
是不是能應(yīng)用到印尼錢包中呢。明天我再了解一下。
Reference:
[1]https://realm.io/cn/news/data-binding-android-boyar-mount/