Google IO大會進行中,本次大會Android最大的新聞當屬Android O以及Kotlin被官方認可。我發現了原來還有發佈官方的架構庫,以及推薦使用指南,分享給大家。
架構原則
-
關注分離
-
模型驅動UI,優先持久化模型
新架構
如上圖所示,爲新的架構模式:
Activity/Fragment
UI層,通常是Activity/Fragment等
監聽ViewModel,當VIewModel數據更新時刷新UI
監聽用戶事件反饋到ViewModel。
ViewModel
持有保存,或者想Repository來獲取UI層需要的數據
響應UI層的事件,執行響應的操作
響應變化,並且通知到UI層
Repository
App的完全的數據模型,ViewModel交互的對象
提供簡單的數據修改和獲取的接口
配合好網絡層數據的更新與本地持久化數據的更新,同步等
Data Source
包含本地的數據庫等,網絡api等
這些基本上和現有的一些MVVM,以及Clean架構的組合比較相似,不過谷歌提供了一些新的類庫來幫助我們實現這個架構。
谷歌的新玩具
本地IO大會谷歌提供了新的類庫來實現這個功能,小標題我寫新玩具是因爲這個庫目前還在alpha1版本,官方只建議在個人小項目中使用。
這個類庫包含如下一些東西:
-
Lifecycle
Android聲明週期的回調,幫助我們將原先需要在onStart()等生命週期回調的代碼可以分離到Activity或者Fragment之外。
-
LiveData
一個數據持有類,持有數據並且這個數據可以被觀察被監聽,和其他Observer不同的是,它和Lifecycle是綁定的。
-
ViewModel
用於實現架構中的ViewModel,同時是與Lifecycle綁定的,使用者無需擔心生命週期。方便在多個Fragment之前分享數據,比如旋轉屏幕後Activity會重新create,這時候使用ViewModel可以方便使用之前的數據,不需要再次請求網絡數據。
-
Room
谷歌推出的一個Sqlite ORM庫,不過使用起來還不錯,使用註解,極大簡化數據庫的操作。
框架補充
工具庫幫助我們進行開發,如果不滿足官方的庫其實可以自己實現。比如LiveData在某些情況下可使用RxJava代替。
數據層官方推薦使用Room或者Realm或者其他Sqlite ORM等都可以,同時從某些方面看Room風格很像Retrofit。網絡請求也被推薦使用Retrofit。
各層之間的耦合推薦使用服務發現(Service Locator)或者依賴注入(DI),會上推薦了Dagger。
測試
各層之間的合理分層,爲測試提供極大的方便。
-
UI層測試
使用Android Instrumentation Test,藉助Espresso庫進行,藉助Mock的ViewModel,可以專注於測試UI
-
ViewModel 測試
使用Mock的Repository來提供數據,使用JUnit測試,因爲不涉及UI,運行速度會快很多。
-
Repository測試
數據層Mock一些數據返回給Repository,使用JUnit測試即可
-
數據層測試
使用JUnit測試
數據庫,使用Room的話官方提供了測試支持,在測試時候創建內存數據庫即可。
網絡請求,使用MockWebServer來提供假的服務端即可。
再補一個會議時的項目結構圖,以一個用戶信息頁面爲例。
最後的話
目前這個庫還不完善,api可能隨時會變,公司項目不建議使用,個人項目可以嚐鮮。另外對於已經有的項目,也不建議更換到現在的架構。不過這個項目的好的思想可以借鑑到我們自己的項目中來,同時這個庫的方式我們其實可以藉助其他的開源庫來實現。
本文不再貼相關代碼,具體各個庫的使用請查看官方文檔https://developer.android.com/topic/libraries/architecture/guide.html。
附上官方的DEMO項目:https://github.com/googlesamples/android-architecture-components
這次的視頻:https://www.youtube.com/watch?v=FrteWKKVyzI
文中如果錯誤,歡迎指正.
原文地址:http://blog.isming.me/2017/05/18/android-architecture-components-guide/,轉載請註明出處。