簡單聊聊Android Architecture Componets

Google IO大會進行中,本次大會Android最大的新聞當屬Android O以及Kotlin被官方認可。我發現了原來還有發佈官方的架構庫,以及推薦使用指南,分享給大家。

架構原則

  • 關注分離

  • 模型驅動UI,優先持久化模型

新架構

imgac_architecture.png

如上圖所示,爲新的架構模式:

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來提供假的服務端即可。

imgac_profilefragment.png

再補一個會議時的項目結構圖,以一個用戶信息頁面爲例。

最後的話

目前這個庫還不完善,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/,轉載請註明出處。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章