重構 Plaid 的目標不只是修復內容源 API 接口的失效問題,更重要的是應用最新的 Android Jetpack、Kotlin 語言特性和 Android 應用架構指南,所以 Plaid 2.0 將不單單是 Material Design 的示例應用,同時還將是一個使用了 Kotlin 的符合 Android 應用架構指南的示例應用。html
本文將爲你們分享和總結 Android 團隊工程師們在重寫 Plaid 應用時的實踐經驗,前面部分將着重分享應用的分層設計,後面部分是具體使用 Kotlin 實現的視頻,擴展閱讀部分提供了更多 Plaid 重構以及 Kotlin 相關知識的文章。android
起初,咱們定位 Plaid 將是一款 Material Design 樣例應用,咱們但願經過它展現 Material Design 的能夠爲交互體驗帶來的改進。git
不過,咱們有失去也有獲得: Kotlin 做爲 Android 官方的首要支持編程語言這一重大的消息在 17 年 Google I/O 時公佈。同年 11 月,Android Jetpack 系列內的架構組件 (Architecture Components) 1.0 版正式發佈,用以幫助開發者構建高質量的應用,這份指南包含了移動應用用戶體驗的說明,常見的架構原則,推薦的應用架構說明和最佳實踐等。github
所以,在決定修復 Plaid 應用 Bug 的同時,咱們但願爲這個項目加入 Jetpack 架構組件和引入 Kotlin 語言,使其成爲一個更 "時尚" 的應用。數據庫
隨着 Android 平臺不斷的改進以及 Kotlin 在全球開發者社區的迅速流行,達到這個目標變得更容易了。好比能夠經過使用 Android App Bundles 動態增添新的新聞源,使用新的 AndroidX 庫,使用 Jetpack,遵循 Android 應用架構指南構建應用等。編程
首先是 Data 層,這一層咱們會關注數據的交互和持久化存儲,咱們設計了 RemoteDataSource 和 LocalDataSource 兩個類,其中 RemoteDataSource 將用來與 API 服務交互,構造請求數據,接收響應數據;而 LocalDataSource 則會負責將數據存儲在本地,存儲的方式能夠經過數據庫,或者 SharedPreferences。後端
實際的業務邏輯一般會比較複雜,咱們設計了一些小型的輕量級而且能夠複用的 UseCase 類,這些類將基於實際的業務邏輯來處理數據,由這些 UseCase 類構成了應用架構的第二層: Domain 層。特別要提到的是,每一個 UseCase 類將只負責完成一個單獨的任務,好比回覆評論等:緩存
Kotlin 語言有諸多特性 (如協程的 suspend 函數、擴展函數和高階函數等) 能夠幫助開發者更好的構建應用。好比,咱們在重構 Plaid 應用時具體的利用擴展函數來提升 "when" 表達式的可讀性。請參考下面的視頻來了解更多有關的技巧和最佳實踐:網絡
本文僅針對 Plaid 的應用架構和 Kotlin 實現進行了簡單描述,更多關於 Plaid 相關文章,包括 Android App Bundles、AndroidX 重構,以及多模塊的依賴注入實踐等,請參看咱們經過掘金翻譯計劃的社區內容項目發佈的文章:架構
Plaid 2.0 應用在 GitHub 開源,查看更詳細的代碼實現,或參與本開源項目,請查看: github.com/android/pla…
關於 Kotlin 的更多知識,能夠參考咱們以前發佈的內容《31 天,從淺到深輕鬆學習 Kotlin》,或 點擊這裏 訪問 Android 開發者文檔網站。