2012年1月11日水曜日

[PHP] Chain of Reponsibility (CoR)を使ったDispatcher

なぜかChain of Reponsibility (CoR)を使ったDispatcherをPHPで書いている。今、必要なこととも思えないが、一度始めたら見切りを付けるまで頭から離れない。仕方ないので書いている感じ。

そもそもは、Html5のローカルアプリ開発にJavaScriptのMVCいるよね、という話から始まって、Mediatorパターンいいよと言われたところからスタートした気がする。

で、JavaScriptの簡易MVC・フレームワークを探したら…
簡単に見つかる。
で、コードを読んでも追いかけられない。
モデルが既に存在しているので、Cenaをそのまま使えない。

じゃあ自分で書いてみるか、となって、
MVCを勉強することにした。


MVCモデルって、要はリクエスト(httpの要求ですね)をもとに、
処理するルーチン(関数でもクラスでも)を決めるだけだよね?
それってなんて言うDispatch?
だからDispatchを書き始めた。

◆車輪の再発明だけど

書いているうちに、簡単なのだと使いづらいと思い始めた。
実際にデータを読み込むところをモデルと考えた場合、
その前後にたくさんの処理が必要になる。

例えば認証、キャッシュ。
認証でエラーがあればモデルなんか読み込む必要がない。
キャッシュにヒットすれば、これまたモデルを読み込む必要がない。
一方、モデルの処理中に致命的エラーが起きたら、まったく別の画面に飛ばす場合もあるでしょう。
で、全部OKだったら、読み込んだデータをHTMLに直す処理を始められる。

つまり途中で処理をかえる必要がある。
思ったより、複雑。

◆CoR

で、CoRを使ってみることにした。
これしか使えそうなパターンを知らなかったからだけど、symfonyやstrutsでも使われてるとどこかで読んだので間違った選択ではなかったみたい。

と、この辺りで気づいたのは、
リクエストから処理するルーチンをDispatchする部分(Router)と、
実際に処理を行うルーチンでのDispatchする部分(なんて言うんだ?)と、
別の話だなと。


0 件のコメント: