fluxが解決する課題と妥協
React.jsでだるいところ
- 末端のコンポーネントから最上位コンポーネントへイベントを何度も伝播させる必要がある(これはMVC設計なら必ず起こりうる)
- 最上位コンポーネントのみが持っているstateを末端コンポーネントへ向かって何度も伝える必要がある。
React をアプリ全体に適用する場合でも、コンポーネントの階層が深いと同じ問題があります。状態を持つ上位のコンポーネントとその状態が欲しい末端のコンポーネントの間で、中間コンポーネントが自分と関係ないデータやイベントハンドラを下に伝える必要が出てくるからです。なので、結局コンポーネントの階層構造外に状態を持ちたくなります。
この問題への解決策がActionsとDispatcher
C#実装への応用案1
- 機能毎(対応するController単位とか。Controllerを置き換えるもの)で、
ActionCreator
を作成する。 - 各Viewは対応する
ActionCreator
が持つevent(Actions)を発火するだけ ActionCreator
のcallbackでModelを操作する
単純にControllerを置き換えるだけ
View -> ActionCreator ( -> Controller ) -> Model -> View
C#でflux実装を試みる際の注意
- dispatcherで依存管理をしようと思わない(制約)
- StoreからViewへの通知はデータバインド