關(guān)于 Effect
Effect 是對非修改數(shù)據(jù)行為的標(biāo)準(zhǔn)定義,它是一個函數(shù)簽名: (Context, Action) => Object
它主要包含四方面的信息
- 接收來自 View 的“意圖”,也包括對應(yīng)的生命周期的回調(diào),然后做出具體的執(zhí)行。
- 它的處理可能是一個異步函數(shù),數(shù)據(jù)可能在過程中被修改,所以我們不崇尚持有數(shù)據(jù),而通過上下文來獲取最新數(shù)據(jù)。
- 它不修改數(shù)據(jù), 如果修要,應(yīng)該發(fā)一個 Action 到 Reducer 里去處理。
- 它的返回值僅限于 bool or Future, 對應(yīng)支持同步函數(shù)和協(xié)程的處理流程。
比如:良好的協(xié)程的支持
關(guān)于 Reducer
Reducer 是一個完全符合 Redux 規(guī)范的函數(shù)簽名:(T,Action) => T
一些符合簽名的 Reducer
同時我們以顯式配置的方式來完成大組件所依賴的小組件、適配器的注冊,這份依賴配置稱之為 Dependencies。
所以有這樣的公式 Component = View + Effect(可選) + Reducer(可選) + Dependencies(可選)。
一個典型的組裝
通過 Component 的抽象,我們得到了完整的分治,多緯度的復(fù)用,更好的解耦。
Adapter
Adapter 也是對局部的展示和功能的封裝。它為 ListView 高性能場景而生,它是 Component 實(shí)現(xiàn)上的一種變化。
-
它的目標(biāo)是解決 Component 模型在 flutter-ListView 的場景下的 3 個問題
-
1)將一個"Big-Cell"放在 Component 里,無法享受 ListView 代碼的性能優(yōu)化。
-
2)Component 無法區(qū)分 appear|disappear 和 init|dispose 。
-
3)Effect 的生命周期和 View 的耦合,在 ListView 的場景下不符合直觀的預(yù)期。
概括的講,我們想要一個邏輯上的 ScrollView,性能上的 ListView ,這樣的一種局部展示和功能封裝的抽象。
做出這樣獨(dú)立一層的抽象是,
我們看實(shí)際的效果, 我們對頁面不使用框架,使用框架 Component,使用框架 Component+Adapter 的性能基線對比
- Reducer?is?long-lived,?Effect?is?medium-lived,?View?is?short-lived.
我們通過不斷的測試做對比,以某 android 機(jī)為例: - 使用框架前 我們的詳情頁面的 FPS,基線在 52FPS。
- 使用框架, 僅使用 Component 抽象下,F(xiàn)PS 下降到 40, 遭遇“Big-Cell”的陷阱。
- 使用框架,同時使用 Adapter 抽象后,F(xiàn)PS 提升到 53,回到基線以上,有小幅度的提升。
Directory
推薦的目錄結(jié)構(gòu)會是這樣
sample_page
– action.dart
– page.dart
– view.dart
– effect.dart
– reducer.dart
– state.dart
components
sample_component
– action.dart
– component.dart
– view.dart
– effect.dart
– reducer.dart
– state.dart
上層負(fù)責(zé)組裝,下層負(fù)責(zé)實(shí)現(xiàn), ? 同時會有一個插件提供, 便于我們快速填寫。
以閑魚的詳情場景為例的組裝:
組件和組件之間,組件和容器之間都完全的獨(dú)立。
Communication Mechanism
- 組件|適配器內(nèi)通信
- 組件|適配器間內(nèi)通信
簡單的描述:采用的是帶有一段優(yōu)先處理的廣播, self-first-broadcast。
發(fā)出的 Action,自己優(yōu)先處理,否則廣播給其他組件和 Redux 處理。
最終我們通過一個簡單而直觀的 dispatch 完成了組件內(nèi),組件間(父到子,子到父,兄弟間等)的所有的通信訴求。
Refresh Mechanism
數(shù)據(jù)刷新
-
局部數(shù)據(jù)修改,自動層層觸發(fā)上層數(shù)據(jù)的淺拷貝,對上層業(yè)務(wù)代碼是透明的。
-
層層的數(shù)據(jù)的拷貝
-
一方面是對 Redux 數(shù)據(jù)修改的嚴(yán)格的 follow。
-
另一方面也是對數(shù)據(jù)驅(qū)動展示的嚴(yán)格的 follow。
視圖刷新
- 扁平化通知到所有組件,組件通過 shouldUpdate 確定自己是否需要刷新
優(yōu)點(diǎn)
數(shù)據(jù)的集中管理
- 通過 Redux 做集中化的可觀察的數(shù)據(jù)管理。我們將原汁原味地保留所有的 Redux 的優(yōu)勢,同時在 Reducer 的合并上,變成由框架代理自動完成,大大簡化了使用 Redux 的繁瑣度。
組件的分治管理
- 組件既是對視圖的分治,也是對數(shù)據(jù)的分治。通過逐層分治,我們將復(fù)雜的頁面和數(shù)據(jù)切分為相互獨(dú)立的小模塊。這將利于團(tuán)隊內(nèi)的協(xié)作開發(fā)。
View、Reducer、Effect 隔離
- 將組件拆分成三個無狀態(tài)的互不依賴的函數(shù)。因為是無狀態(tài)的函數(shù),它更易于編寫、調(diào)試、測試、維護(hù)。同時它帶來了更多的組合、復(fù)用和創(chuàng)新的可能。
聲明式配置組裝
- 組件、適配器通過自由的聲明式配置組裝來完成。包括它的 View、Reducer、Effect 以及它所依賴的子項。
良好的擴(kuò)展性
- 核心框架保持自己的核心的三層關(guān)注點(diǎn),不做核心關(guān)注點(diǎn)以外的事情,同時對上層保持了靈活的擴(kuò)展性。
自我介紹一下,小編13年上海交大畢業(yè),曾經(jīng)在小公司待過,也去過華為、OPPO等大廠,18年進(jìn)入阿里一直到現(xiàn)在。
深知大多數(shù)Android工程師,想要提升技能,往往是自己摸索成長或者是報班學(xué)習(xí),但對于培訓(xùn)機(jī)構(gòu)動則幾千的學(xué)費(fèi),著實(shí)壓力不小。自己不成體系的自學(xué)效果低效又漫長,而且極易碰到天花板技術(shù)停滯不前!
因此收集整理了一份《2024年Android移動開發(fā)全套學(xué)習(xí)資料》,初衷也很簡單,就是希望能夠幫助到想自學(xué)提升又不知道該從何學(xué)起的朋友,同時減輕大家的負(fù)擔(dān)。
既有適合小白學(xué)習(xí)的零基礎(chǔ)資料,也有適合3年以上經(jīng)驗的小伙伴深入學(xué)習(xí)提升的進(jìn)階課程,基本涵蓋了95%以上Android開發(fā)知識點(diǎn),真正體系化!
由于文件比較大,這里只是將部分目錄大綱截圖出來,每個節(jié)點(diǎn)里面都包含大廠面經(jīng)、學(xué)習(xí)筆記、源碼講義、實(shí)戰(zhàn)項目、講解視頻,并且后續(xù)會持續(xù)更新
如果你覺得這些內(nèi)容對你有幫助,可以添加V獲?。簐ip204888 (備注Android)
學(xué)習(xí)分享
①「Android面試真題解析大全」PDF完整高清版+②「Android面試知識體系」學(xué)習(xí)思維導(dǎo)圖壓縮包
本文已被CODING開源項目:《Android學(xué)習(xí)筆記總結(jié)+移動架構(gòu)視頻+大廠面試真題+項目實(shí)戰(zhàn)源碼》收錄
一個人可以走的很快,但一群人才能走的更遠(yuǎn)。如果你從事以下工作或?qū)σ韵赂信d趣,歡迎戳這里加入程序員的圈子,讓我們一起學(xué)習(xí)成長!
AI人工智能、Android移動開發(fā)、AIGC大模型、C C#、Go語言、Java、Linux運(yùn)維、云計算、MySQL、PMP、網(wǎng)絡(luò)安全、Python爬蟲、UE5、UI設(shè)計、Unity3D、Web前端開發(fā)、產(chǎn)品經(jīng)理、車載開發(fā)、大數(shù)據(jù)、鴻蒙、計算機(jī)網(wǎng)絡(luò)、嵌入式物聯(lián)網(wǎng)、軟件測試、數(shù)據(jù)結(jié)構(gòu)與算法、音視頻開發(fā)、Flutter、IOS開發(fā)、PHP開發(fā)、.NET、安卓逆向、云計算文章來源:http://www.zghlxwxcb.cn/news/detail-850069.html
Android移動開發(fā)、AIGC大模型、C C#、Go語言、Java、Linux運(yùn)維、云計算、MySQL、PMP、網(wǎng)絡(luò)安全、Python爬蟲、UE5、UI設(shè)計、Unity3D、Web前端開發(fā)、產(chǎn)品經(jīng)理、車載開發(fā)、大數(shù)據(jù)、鴻蒙、計算機(jī)網(wǎng)絡(luò)、嵌入式物聯(lián)網(wǎng)、軟件測試、數(shù)據(jù)結(jié)構(gòu)與算法、音視頻開發(fā)、Flutter、IOS開發(fā)、PHP開發(fā)、.NET、安卓逆向、云計算**文章來源地址http://www.zghlxwxcb.cn/news/detail-850069.html
到了這里,關(guān)于2億用戶背后的Flutter最新開源框架;Fish-Redux,GitHub已標(biāo)星16k的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!