WAFの拡張ポイント
Sledge, Catalyst, Rails, Merbあたりを見て、フレームワークの拡張方法と拡張のポイントを考えてみました。
拡張するポイントは以下の5点。
- Dispatcher
- Controller
- View
- Middleware
- (Context)
Server(Dispatcher)
- PluginのHookポイント
- AFTER_INIT
- BEFORE_DISPATCH
- Controllerのインスタンスにディスパッチしてactionを実行する前に、Pluginを実行する系。Controller毎のHookではないGlobalなHook
- BEFORE_DISPATCHとかにAuthentication系のPlugin
- AFTER_DISPATCH
View系のPlugin
- PluginのHookポイント
- AFTER_INIT
- BEFORE_RENDER
- Viewで結果をrenderingする前のPlugin
- AFTER_RENDER
- Viewで結果をrenderingする際のFilter
Controller系の拡張
Controller系はHook pointにHookするという形のPlugin形式ではなくて、RoleによるMixinによる拡張がいいかなと。それとFilterを組み合わせて使うという形にしようかなぁと思っている。
Middleware
- request lifecycleのhook
- これはフレームワークではなくて、HTTP::Engineのレイヤ
- HTTPx::Middleware::Unicode, HTTPx::Middleware::Session, HTTPx::Middleware::DebugScreenなど
Context
- CatalystのContext系のPluginをどうするかは少し考え中
- 必要なのはi18n系くらいかなぁという気がしていて、あえてPluginにせずにcoreに組み込んじゃえばいいかなぁという気はする
上記で考えたHookについては、http://github.com/dann/angelos/tree/master に実装をいれてあります。