關于Android的Data Binding技術
此次Google IO大會,給Andorid開發者帶來了很多福利。我對其中的Data Binding技術最感興趣,所以花時間研究了一下。
Data Binding與MVVM
Data Binding即數據綁定,在很多前端框架中都有應用,比如Google維護的AngularJS就支持View和Model的雙向綁定。當數據更新,框架收到通知,視圖可以自動更新,View和Model可以做到松耦合。
有了Data Binding庫的支持,在Android中可以很方便的實現MVVM的開發模式。MVVM,是Windows社區的一種叫法,即Model-View- ViewModel。在Android中,Activity,Fragment,Dialog之類都屬于View層;Model層主要負責數據相關部分,可以從數據庫或者網絡獲取;ViewModel主要是把Model轉換為View可以呈現的東西,例如把一個Date類型轉化為格式化后的String。
ViewModel在哪里呢?在Data Binding插件的支持下,會實時生成以Layout名稱命名的Binding類,比如Layout名稱為activity_main,則會生成 ActivityMainBinding類,數據綁定在Layout文件中XML標注,最終在ActivityMainBinding中轉化為Java代碼,所以ActivityMainBinding類扮演了ViewModel的角色。
在我看來,MVVM相對于傳統的MVC,把一些業務邏輯抽離,放到ViewModel中,可以減輕Activity和Fragment的壓力,同時數據綁定也大大減少了邏輯代碼,另一方面對于測試來說,數據變化引起視圖自動更新,可以更加方便測試。但在XML中進行數據綁定的操作,可能不利于調試。
在Google官方發布Data Binding庫之前,已經有類似的開源項目,如RoboBinding,支持雙向綁定等,比較成熟,Google的庫目前只支持單向綁定,為Beta版本,不知道后面是不是還有很多特性改進。你會發現,由于Android的開源特性,開發者在很多方面走在了Google的前面,比如這次發布的權限控制,國內很多ROM早就有了這個功能。我在想,當Google發布新版本的時候,會不會去看看MIUI有什么特性優化呢。
參考資料
Data Binding Guide (官方資料)
Web開發的MVVM模式(MVC VS. MVP VS. MVVM)
MVVM介紹(iOS中MVVM的一種實現,對概念的理解有幫助)
MVVM on Android: What You Need to Know (這個博客很不錯)
Animating Android Binding Transitions(Data Binding技巧)
Sample
官方貌似沒有Data Binding的Sample,我寫了個簡單的Demo,Github地址:
https://github.com/jasonross/DataBindingSample