Fluxの設計を考えてみる

https://raw.githubusercontent.com/facebook/flux/master/docs/img/flux-diagram-white-background.png

なぜこの設計になっているのか

なぜAction Creatorsがあるのか

  • MVCでいうCにあたる(dispatcherも含めて)(Model = Store, V = Component)のだろうが、その役割そのもの
  • つまり、Viewとロジックの 疎結合 を保つために必要。容易に取り替えられるような Interface となる。
  • 依存関係を図に書いてみると分かりやすいかも。Actionsがない場合、Component - Store間の依存性が凄いことになる。

なぜConstantsがあるのか

  • イベント駆動で書いていると、イベント名(string)がグローバルっぽい感じになって管理しづらい。
  • それを一箇所にまとめるために必要だった。(個人的解釈)

Action Creatorsから、イベントdispatchするのはなぜ

  • dispatcherがあるおかげで、Store間の依存関係を管理できる。
    • 例)AStoreのfooCallbackが終了してから、BStoreのbarCallbackを起動する
  • fluxの肝である「単方向データフロー」を実現(強制)するために不可欠な存在である。
  • ActionsがどのStoreを使うか、知らなくて済むようになる。

Storeがイベントemitするのはなぜ

  • ここも疎結合のため。大量のView, Storeが存在したとしても、ひとつだけView, Storeが存在するものとみなせる。(dispatcherも似たような役割がある)

Storeとはなにか

Store は、アプリケーションの状態とロジックを含んでいます。Store の 役割は、古典的な MVC における Model の役割に少し似ていますが、しか し多数のオブジェクトの状態を管理していて、一個のオブジェクトのイン スタンスではないという点が異なっています。また、Backboneフレームワー クのコレクションと同じものでもありません。ORM形式のオブジェクトの集 合を管理するよりももっと単純に、Storeはそのアプリケーション内のある 特定の ドメイン について、アプリケーションの状態を管理します。

参考

www.infoq.com

github.com