《重學安卓》兩週年,回顧與展望 以 “深度思考” 爲立足之本 不小心當了回 “萬惡之源” 本質概括一覽 開源項目一覽 對未來的展望

我們於 2019 年 6 月,在小專欄開設了《重學安卓》付費專欄,

迄今爲止,我們共連接了 1111 名優秀開發者,並且期間不斷有小夥伴告訴我,受專欄內容的影響和啓發,他們也開啓了寫作之路,

這裏面就包括 專注 ROM 開發多年、現就職於快手的 Flywith24,也包括 Bezier 等對寫作技能精益求精的明日之星。

以 “深度思考” 爲立足之本

在過去兩年裏,我們以 “架構組件” 爲話題,不遺餘力地在每篇文章中貫徹落實 基於 “第一性原理” 和 “實事求是” 精神的深度思考方式

在 “深度思考” 的幫助下,以及基於對大量樣本的追蹤和反思,我們獨樹一幟地從軟件工程的視角出發抓住本質,並開源了一系列高頻使用的倉庫,

包括 騰訊音樂、BMW、TCL 等知名廠商的軟件,都在使用我們正在維護的《UnPeek-LiveData》等倉庫。

不小心當了回 “萬惡之源”

不知何時起,你是否經常在 培訓機構軟文 或網文中看到 “一致性” 等令人迷惑的說辭?

這些術語在 Android 領域是從未有過,網上關於 “一致性問題” 等說辭,它們都有一個共同的來源,

事實上,這些術語都是本人經由長期的深度思考、實踐和交流後,爲現象本質匹配的高度概括,《重學安卓》與之相對應的每一篇文章都 提供了 背景緣由、職責邊界 等完整的解析過程

但十分令人遺憾的是,本是從 “實事求是” 出發概括的術語,卻頻繁被人拿去 “點綴文章” 和 “掛羊頭賣狗肉”,這些無厘頭的濫用行爲,無形中扭曲和破壞了術語 “實事求是” 的形象,

所以過去兩年裏,我們積極地舉報 “培訓機構的洗稿軟文”,以及在相關文章的評論區補充參考文獻來源,

非常感謝小夥伴們的主動反饋。

本質概括一覽

基於深度思考,我們確立下來並廣泛傳播的 “本質概括” 包括但不限於:

Jetpack 架構組件本質:

Lifecycle 的本質是解決 “生命週期管理” 的一致性問題

LiveData 的本質是解決 “跨域消息同步” 的一致性問題

ViewModel 的本質是解決 “狀態保存恢復” 的一致性問題

DataBinding 的本質是解決 “視圖實例的 null 安全” 的一致性問題

Navigation 的本質是解決 “路由初始參數恢復” 的一致性問題

若要說它們有什麼共性的話,就是透過各種方式 實現樣板邏輯的 “內聚”,從而達到規避一致性問題的目的。

文章來源

《是讓人耳目一新的 Jetpack MVVM 精講》

《是架構組件 “一致性” 概念的全面解析》

·

《爲你還原一個真實的 Jetpack Lifecycle》

《就算不用 Jetpack Navigation,也請務必領略的聲明式編程之美》

《LiveData 鮮爲人知的 身世背景 和 獨特使命》

《有了 Jetpack ViewModel . . . 真的可以爲所欲爲》

《從 被誤解 到 真香 的 Jetpack DataBinding》

聲明式 UI 本質:

聲明式 UI 的本質是函數式編程,

函數式編程的基石是純函數,

純函數的特性是 只有一個入口、只有一個出口,且無副作用,

聲明式 UI 正是通過對視圖實例的屏蔽,來規避 “視圖實例的 null 安全” 的一致性問題,

也即聲明式 UI 可用於替代 DataBinding 等框架,

如果公司項目執意使用 Java,爲了規避 null 安全問題,務必使用 DataBinding 等框架,

如果允許使用 kotlin,那麼當下 kotlin + ViewBinding 的組合是更優解

文章來源

《是 “一通百通” 的 聲明式 UI 掃盲幹貨》

《從 被誤解 到 真香 的 Jetpack DataBinding》

架構模式本質:

MVP 的本質是基於 “依賴倒置原則” 實現組件的可替換,適合非頁面開發場景的編寫(具體可參見我開源的 Linkage-RecyclerView 中萬用的適配器),

MVVM 的本質是基於 “數據綁定” 來解決視圖實例 null 安全一致性問題,也即它是專用於頁面開發的模式,

當我們剔除了 DataBinding 框架而使用 Compose 或 kotlin + ViewBinding 等方式來規避一致性問題,雖然效果是等同的,但已不能稱作是 MVVM。

文章來源

《如何讓同事愛上架構模式、少寫 bug 多註釋》

《是讓人提神醒腦的 MVP、MVVM 關係精講》

LiveData 的那些事:

LiveData 的設計存在缺陷。

一方面它提供了面向 “事件” 的設計,

這使得我們萌生了通過 “決策權收緊” 的結構(也即所謂 “唯一可信源”)來確保 “消息分發可靠一致” 的目的成爲可能,

另一方面它權當自己是 “狀態”,而僅提供粘性的設計,

正是這種令人迷惑的設計,導致了所謂 “數據倒灌” 現象的發生。

要想弄清楚 “唯一可信源” 和 “數據倒灌”,得先正確理解和區分 “狀態” 和 “事件”。

文章來源

《LiveData 唯一可信源 讀寫分離設計 獨家解析》

《LiveData 數據倒灌 背景緣由全貌 獨家解析》

開源項目一覽

包括 騰訊音樂、字節跳動直播 在內的諸多廠商或團隊,參考過或正在使用我們開源和維護的《腳手架》等項目,

https://github.com/KunMinX/Jetpack-MVVM-Scaffold

解決 LiveData 數據倒灌問題的 UnPeek-LiveData

https://github.com/KunMinX/UnPeek-LiveData

解決 Navigation 轉場卡頓的 Smooth-Navigation

https://github.com/KunMinX/Smooth-Navigation

我和 Flywith24 合作開發維護的 Jetpack MVVM - Java to Kotlin 示例

https://github.com/Jetpack-Missionary/Jetpack-From-Java-To-Kotlin

作爲依賴倒置原則 MVP 的 Linkage-RecyclerView

https://github.com/KunMinX/Linkage-RecyclerView

對未來的展望

《重學安卓》發展至今,已從單純的寫作專欄,演化爲高手雲集的社羣,這裏平均每兩週一位小夥伴告知自己入職字節跳動,也有來自 HencoderPlus 的小夥伴不斷加入,

關於寫作,《重學安卓》一直保持初心,只寫揭露本質的 “深度思考” 文章,授人以魚且授人以漁。

比起無原則的盲目擴充,我們選擇慎重選題和長期修訂打磨,確保能恰到好處地覆蓋到 關於某領域的 來龍去脈、各式場景、最新動態,

並且考慮到部分讀者有截圖收藏的需要,我們逐步爲專欄文章增設 “語錄卡片”,方便已訂閱的讀者保存到手機、隨時查看、以及通過二維碼直達原文重溫。

最後,感謝小夥伴們一直以來的關心和支持!

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