Flutter狀態(tài)管理框架BloC與Mobx的比較

這里先放上BlocMobx的官方文檔地址。其中Bloc的版本為V0.21.0,Mobx的版本為V0.3.1+1,F(xiàn)lutter的版本為V1.7.8+hotfix.4


一:相同之處
  • 1:二者都是基于rx的訂閱模式來實(shí)現(xiàn)的框架。
  • 2:二者都實(shí)現(xiàn)了presentation layer 與 business layer之間的分離。
二:不同之處
  • 1:bloc是對(duì)RxDart的抽象。這里引用文檔的原話:

Bloc is built on top of RxDart; however, it abstracts all of the RxDart specific implementation details.

  • 2:Mobx對(duì)Rx概念的實(shí)現(xiàn),就更加明顯,在官方文檔中隨處可見。
  • 3:bloc更加注重對(duì)細(xì)節(jié)的把握。比如在文檔中經(jīng)常提到

f you want fine-grained control over when the builder function is called you can provide an optional condition to BlocBuilder

If you want fine-grained control over when the listener function is called you can provide an optional condition to BlocListener

  • 4:Mobx則因?yàn)槭褂昧舜a生成,導(dǎo)致更多細(xì)節(jié)不容易控制。同時(shí)Mobx還有一種MVVM的思想在里面。

二者文檔的話,由于Mobx引用了json_annotation庫,并且使用了build_runner,mobx_codegen來進(jìn)行相關(guān)的代碼生成,導(dǎo)致文檔讀起來會(huì)比較繞。尤其是對(duì)json注解的理解,需要做solid underStanding才可以充分吸收。

相比較而言,Bloc雖然也使用了equatable庫,來進(jìn)行狀態(tài)之間的比較,因?yàn)橄嗤臓顟B(tài)是會(huì)被忽略的,但是總的學(xué)習(xí)成本要偏低不少。

同時(shí)Bloc的整體代碼量相對(duì)來說會(huì)偏多,但是都是程式代碼。因此使用相關(guān)插件,也可以避免。另外Bloc在調(diào)試方面也較Mobx有優(yōu)勢,比如Bloc的BlocDelegate就可以收集全局的所有事件和狀態(tài)流,來進(jìn)行time-travel。針對(duì)不同的Bloc,也可以單獨(dú)收集。Bloc在mapEventToState()的invoke的調(diào)用前后,都可以進(jìn)行hook等,讓Bloc更加友善。

3:json_serializable庫

無論是Bloc還是Mobx,都可以使用json_serializable庫來處理實(shí)體Model。但是由于Mobx框架還具有MVVM思想,因此Mobx對(duì)實(shí)體Model更加依賴。實(shí)體Model中的變量注解,也就成為了學(xué)習(xí)Mobx的關(guān)鍵。在實(shí)際開發(fā)中,我們的實(shí)體Model往往嵌套比較深,比如

{
    "data":{
        "user":{
            "avatar_url":"https://dev-img-avatar.moremom.cn/2019/18874406/35/FvH0rc_MFtSODLeIdlbafrAfNI6T",
            "city":{
                "city_id":652900,
                "city_name":"阿克蘇地區(qū)"
            },
            "cv":"混吃混喝又是一天 哦lol王lz 咯一快也扣 咯哦lolX5 哦搜狐心咯我 沐浴液 他墨跡我了 look你 女女OK look哦咯",
            "gender":1,
            "id":18874406,
            "is_mentor":true,
            "nickname":"摩爾撻戰(zhàn)士戰(zhàn)士戰(zhàn)士",
            "term_id":154,
            "title":"清華美院畢業(yè),《哈利·波特》中文版繪者",
            "update_avatar":null,
            "verified":false
        }
    },
    "status":{
        "code":0,
        "msg":""
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容