簡介
Github :
首先,說放棄MVP,肯定是夸大其詞了磷支。MVP很好,只是個人不習(xí)慣那么多的回調(diào)食寡,更喜歡Flux這種單向數(shù)據(jù)流模式雾狈。希望大家能多多點(diǎn)贊,多多拍磚冻河!
RxFlux2 是在 RxFlux 基礎(chǔ)上箍邮,使用 RxJava2 和 Dagger2 實(shí)現(xiàn) Flux模式 的輕量級框架。
RxJava2+Retrofit2+Dagger2
Why
減少不同層級之間的耦合:
每一層級負(fù)責(zé)接收數(shù)據(jù)叨叙、發(fā)出數(shù)據(jù)锭弊,不關(guān)心誰來響應(yīng)數(shù)據(jù)變化。RxFlux2 封裝的 Dispatcher 來通知誰(View擂错,Store)來響應(yīng)數(shù)據(jù)變化味滞。
View 只負(fù)責(zé)用戶交互并調(diào)用 ActionCreator 中的方法創(chuàng)建RxAction,不關(guān)心 RxAction 如何執(zhí)行(調(diào)用接口钮呀,操作數(shù)據(jù)庫)剑鞍。
ActionCreator 負(fù)責(zé)創(chuàng)建 RxAction,操作 RxAction爽醋。
操作正確時蚁署,發(fā)送封裝了result data 的 RxAction,不關(guān)心哪個 Store 來接收蚂四。
操作失敗時光戈,發(fā)送 RxError,不關(guān)心哪個 View 來接收遂赠。Store 負(fù)責(zé)接收 RxAction久妆,處理 RxAction 攜帶的 result data,發(fā)送 RxStoreChange跷睦,不關(guān)心哪個 View 來接收筷弦。
減少業(yè)務(wù)模塊之間的耦合(View 層級):
Activity 和 Fragment 解耦,F(xiàn)ragment 與 Activity 之間互不調(diào)用抑诸。
Fragment 之間完全解耦烂琴,不同 Fragment 之間互不調(diào)用。
Activity 主要作為 Fragment 容器哼鬓,負(fù)責(zé)響應(yīng) Fragment 發(fā)送的RxAction(經(jīng)過Store轉(zhuǎn)為RxStoreChange)监右,控制 Fragment 之間的跳轉(zhuǎn)。
不在前端顯示的 Activity 和 Fragment 對應(yīng)的 Store 不會響應(yīng) RxAction异希。
不在前端顯示的 Activity 和 Fragment 不會響應(yīng) RxStoreChange健盒。
RxFlux2 與 RxFlux 的區(qū)別
使用 RxJava2 替換 RxJava1绒瘦,修改 RxBus 實(shí)現(xiàn)方式。
修改 RxAction扣癣,向創(chuàng)建的 RxAction 實(shí)例中添加 key-value 時惰帽,當(dāng) value 為空時,當(dāng)前 key-value 不添加到 RxAction 實(shí)例中父虑。
接口 RxViewDispatch 中刪除 onRxViewRegistered() 方法和 onRxViewUnRegistered() 方法该酗。
views 中 activity 由 RxFlux 類根據(jù) activity 生命周期來負(fù)責(zé)注冊 store、注冊 view士嚎、解除 view 注冊呜魄、解除 store 注冊。
其他 views (fragment莱衩、dialogfragment爵嗅,service)由自己負(fù)責(zé)注冊 store、注冊 view笨蚁、解除 view 注冊睹晒、解除 store 注冊,activity 不再負(fù)責(zé)其中的 fragments的注冊解除操作括细。views 中的相關(guān)操作已被集成到 base 類中伪很。
RxFlux2 架構(gòu)圖
使用 RxFlux2 最好了解 RxJava2 和 Flux,記住 Flux 的架構(gòu)圖能更好的理解 RxFlux2奋单。
RxFlux2 Dagger2及Store生命周期說明
- RxFlux2 使用 Dagger2 將 store锉试、actioncreator及其他需要的類注入到用到的地方,主要在views中用到览濒。
- views 包括activitys键痛、fragments、dialogfragments匾七、services。若是需要接收store發(fā)出的RxStoreChange江兢,需要實(shí)現(xiàn) RxViewDispatch 接口昨忆。在 base 類中已實(shí)現(xiàn)該接口,只需要繼承 base 類即可杉允。
- app 中有一個 AppStore邑贴,用來接收全局性的 RxAction,發(fā)送全局性的 RxStoreChange叔磷。AppStore 跟隨 Application 生命周期拢驾。
- 一個 activity 對應(yīng)一個 ActivityStore(名字隨activity),該 activity 及其管理的 fragments 共享這個 ActivityStore改基。ActivityStore 跟隨 activity 生命周期繁疤。
-
某些特殊的 fragment 對應(yīng)獨(dú)立的 FragmentStore,該FragmentStore 跟隨 fragment 生命周期。
RxFlux2 框架圖