簡體   English   中英

Flutter BLoC - Bloc vs Cubit 事件驅動 state 管理優勢

[英]Flutter BLoC - Bloc vs Cubit event driven state management advantages

Bloc 相對於 Cubit 的實際優勢是什么?

除了可追溯性(您也可以通過在 Cubit 中的適當日志記錄來實現)和高級事件轉換(我想不出任何 Cubit 無法做到的“高級”事件轉換,因為總有辦法做到這一點使用 Cubit。如果您使用的是干凈的架構,域層可以幫助進行復雜的數據操作)。

分享和采購活動

這些是我正在尋找的應該能夠用 Bloc 做的事情,因為這些事情實際上不能用 Cubit 做。 但是,這些似乎是不可能的(或者是嗎?),因為在 Bloc 上添加事件需要您識別將添加事件的實際 Bloc。 bloc.add(YourEvent())

此外,事件共享有點值得商榷,因為這可能導致糟糕的架構/難以維護。

對於事件溯源,如果可能的話,我在文檔中找不到(返回到特定的過去 state?)。

我在這里錯過了什么嗎?

據我所知,當您具有不可變狀態時,無論是塊還是肘,都可以輕松地恢復到過去的 state。 擁有不可變狀態允許您存儲狀態列表並在需要特定 state 時恢復。

Bloc 與cubit 相比沒有優勢,但目的不同。 在 cubit 你有 action=>response (function=>states) 而在 cubit 你有流。

什么肘不能做?

例如,當使用 bloc (自 bloc 7.20 起)時,您可以同時處理兩個事件,但不能在 cubit 上同時調用兩個函數。

分享活動

您可以在不同的塊之間共享事件實現,因為您必須指定事件塊實現的內容。

class MyBlocA extends Bloc<MyEvents, StatesA>

class MyBlocB extends Bloc<MyEvents, StatesB>

如果我理解正確,你想要做的是在兩個不同的塊中處理一個事件,你不能這樣做,因為事件被發送到一個特定的塊。 所以它需要兩個調用:

blocA.add(EventA);
blocB.add(EventA);

根據您的情況,您可能會在 MyBlocB 中收聽 MyBlocA 的 state。 這樣,每當出現 MyblocB 的事件時,操作將取決於 MyBlocA 的 state。

BlocCubit在 state 管理方面是相同的,只有一個區別是 state 突變: Bloc是事件驅動的,而Cubit是方法驅動的。

除此之外,就架構而言,到目前為止並沒有太大的不同。 上面的@chris 已經准確地提到了所有其他人。 如何以我們可以管理的方式維護 state 取決於開發人員。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM