phpでfluxアプローチ

Posted: 2015-04-25 23:11 |  PHP全般 
React.jsが普及しはじめて、flux利用例もよく見聞きするようになってきました。
phpにオブザーバーパターンがすぐに利用できるように用意されています。
SplObserver インターフェイス
SplSubject インターフェイス
オブザーバーパターンをご存知でない方はこちらに
出版ー購読型とよく呼ばれるアレです。
Redisなどのpubsubなどもコマンド駆動型としてこのパターンを用いて、
リアルタイム処理などをするわけです。
いろんなところで散々言われてますが、fluxはこのイベント駆動型というか、
eventを実行する順番が1 -> 2 -> 3 -> 4 ... という流れに対してfluxという名前をつけて展開してます。
それぞれの処理が発火させる次のイベントは決まっています。(決めて実行させる)
MVCはそれぞれの役割がありますが、かならずしもその流れにはなりません。
PHPなどのインタプリタ型の言語はリクエスト-> 処理 -> レスポンス
という決まった通信の流れの中で処理を行うため、MVCは比較的実装しやすいアーキテクチャですが、
その流れをサポートするように、それぞれのフレームワークが間を縫うようにイベントという仕組みを用意して、
いろんな処理を挟みこめるようになっています。
(Node.jsは様々なモジュールが組み込まれているので、すでに機能を持ってます)
fuelPHPやLaravelはミドルウェアやフィルターなどそれぞれの処理が挟み込める位置があらかじめ決まっています。
(Laravelの場合はEventを使って自分で発火のタイミングなどを実装しますが)

ユーザーがどんな順番でなにをどういう風に実行するか、
Dispatcherにやらせて、それぞれを独立させて、
組み合わせた時に意図したように動けば・・
と思ってphpでも流れを取り入れてみたら面白いんじゃないかと思って、
fluxクローンのDispatcher
を最近自分でいろいろ試行錯誤して使っているところです
上記のphpがすでに持っているオブザーバーパターンでも実際同じことができますが、
これはもうちょっと簡単でただ単にdispatchしてるだけです。
そう、まさに同じです。
実装するにあたって敷居が低くなっていると思えば早いです。

下記みたいなのが多分一番シンプルでイメージしやすいでしょう!

$dispatcher = new Iono\Dispatcher\Dispatcher();
$dispatcher->setPrefix("demo.dispatch");
$dispatcher->register(function($payload) use ($dispatcher) {
    if($payload['action'] === 'init') {
        echo "first\n";
    }
});
$second = $dispatcher->register(function() {
    echo "second\n";
});
$dispatcher->unregister($second);
$dispatcher->dispatch([
    'action' => 'init'
]);
registerでそれぞれイベントを登録していきます。
dispatchでイベントを実行させますが、
登録した順番で発火させていきます。
それぞれはコールバックで実行されるので、
登録したイベントでも、特定のアクションでやっぱり除きたいとか
何も考えずにシンプルに書けるようになっているだけですので、
単体で見てもそんなにメリットはありません
が、何かのアイディアにもなるかもしれません。
dispatcherがpubnubの親玉として、それぞれの処理が管理されて実行されていけば
難しいことを考えずに一連の流れができます

それぞれのインスタンスが必要なものはコンテナなどに格納して的確に取り出せれば、
それぞれが独立したものになるはずで!と思って試してますが、なかなか難しいところです

about ytake

執筆に参加しています


Laravel お役立ち情報

share



このエントリーをはてなブックマークに追加

Categories

laravel 45

DTM 0

music 0

PHP全般 31

0

JAPAN 1

WORLD 1

javascript 4

RDBMS 1

NoSQL 1

NewSQL 1

Recent Posts

Ad

comments powered by Disqus

GitHub

Social Links

Author


クリエイティブ・コモンズ・ライセンス
Yuuki Takezawa 作『Ytake Blog』はクリエイティブ・コモンズ 表示 - 非営利 4.0 国際 ライセンス で提供されています。

© ytake/comnect All Rights Reserved. 2014