Web Application Security Memo

ウェブセキュリティに関するメモ書き

Development Software

Fluxアーキテクチャのメモ

※当サイトにはプロモーションが含まれています。

投稿日:2015-05-28 更新日:

Laravel

最近は Flux + React を使っています。Secure Code Tipsでも部分的に採用しました。今回は Fluxアーキテクチャについて、現時点で自分の理解している内容をメモしておきます。

Fluxの概念図

Flux: Actions and the Dispatcher | React というページでは以下の図が使用されています。よく見る図です。

flux-diagram

現在の自分の認識を基にしてこの図をもう少し詳しくすると、以下になります(だいたいこんな感じという程度の図です)。

flux-diagram-custom-006

* Web API と Web API Utils は省略しています。

Web API と Web API Utils

  • Action Creators が保持しているメソッド内からAjaxリクエスト処理等を行う場合、その部分をこちらに切り出して使用します。

Action Creators と Actions

Action

  • 何かしら新しい値が発生した場合に、それらの値を包むのが Action(object literal)です。つまり Action とはデータです。Actionと聞くとメソッドをイメージしてしまうかもしれませんが違います。
  • Actionには “actionType”プロパティを持たせて、区別できるようにします。

Action Creator

  • Action Creator は、主に画面上の操作に対して実行する処理を保持するオブジェクトです。
    • 基本的には actionType毎に対応するメソッドを Action Creator 内に作成します。
    • 上の図では1つのメソッドに1つのActionを対応させていますが、そう決まっているわけではないと思います。
  • このメソッドでは、基本的に (1) Actionを生成し、(2) Dispatcherのdispatch(Action)を実行します。
    • dispatch()を実行する前にAjaxでデータを取得することもありえますし、別のActionCreatorのメソッドを呼ぶこともありえます。
  • 処理の種類毎に Action Creator を作成して使用します。

Dispatcher

  • アプリケーションにただ1つだけ存在し、全てのデータの流れを管理します。
  • 各StoreはあらかじめDispatcherにコールバックを登録しておきます。そのコールバック内では、自分自身(Store)を更新する必要のある actionType が呼ばれた場合の処理を記述しておきます。
    • 基本的には、Store毎にコールバックを登録します。
    • 基本的には、まず Store内のデータを操作する処理を行い、その後で 関連するViewのステータスを更新する処理を実行(イベントの発火)します。
  • 1つの actionType に対して、複数のStoreがそれぞれの処理を登録する可能性があります。
    • この場合、どの Storeの処理から実行するかが問題となりますが、Dispatcherの層がこの順序を解決する責任を持ちます。
      • 各Storeのコールバック処理の中で waitFor()メソッドを使い、依存する他のStoreの処理を先に実行させることができます。

Stores

  • Domainのstate(状態)を管理します。
    • いわゆるMVCのModelに似ていますが、別物であるようです。
    • Domain毎にStoreを作成します。
  • Dispatcherにコールバックを登録します。
    • 各Storeは、自分に関連のあるデータのかたまり(actionTypeで判別する)が発生した時に実行する処理をDispatcherに登録します。
  • これは EventEmitter そのものです。
    • 関連するViewのステータス更新処理を保持して、必要な時に実行します。

(React) View

  • ユーザーが行う操作を受け付けて、ActionCreator内のメソッドを実行します。
  • Storeにあらかじめ登録しておいた自分自身の更新処理が実行されると、Storeから必要なデータを取得し、その値を基にして自分自身(画面)を更新します。

参考

最終更新日: 2015-05-28

-Development, Software
-


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

OpenSSLのHeartbleed脆弱性(CVE-2014-0160)で送信されるHeartbeat Request

この脆弱性で送信されるHeartbeat Requestについて調べてみました。 脆弱性自体については、例えば以下のサイトなどで詳しく説明されています。 OpenSSLの脆弱性(CVE-2014-01 …

no image

Bitbucket上にあるリポジトリからJenkinsへの通知フック設定方法

Jenkinsが稼働するサーバへビルドを指示する通知URLは以下になる。 http://<user_name>:<user_api_token>@<server_host …

no image

CSP(Contents Security Policy)の記述例

記述例 デフォルト設定の記述をする(HTTPレスポンスヘッダの出力)。 同一オリジンも含めて全てのソース1からの読み込みを禁止する場合 Content-Security-Policy: default …

WordPress : “wp_head” タグに対する action 処理

調査対象 WordPress 3.7.1 テーマ:Twenty Thirteen 投稿ページにアクセスして動作を観察する。 まとめ add_action() している箇所 主に、wp-includes …

CentOS

CentOS 7 で sshd のポート番号を変更する

CentOS 7 では sshd のポート番号の変更手順が以前と変わっているのでメモしておきます。 手順 今回は、sshd のポート番号を 2222 に変更します。 1. SELinuxが有効な場合は …