Actionのexecuteメソッド

以前議論していたのにすっかり棚上げにしていたのを思い出してぶり返してみる。

Mapleで当初、1アクションについて1つのメソッド(executeメソッド)しか準備できないようにしたのは、Filterの対応が取れないからだった(ま、その方が単純でいいしと思っていたし)。Mapleをつくるに当たって参考にしたWebWork2では別にexecuteメソッドが受けなければならないとはなってなくて、設定次第では別のメソッドで受けてもいいことになってる。

さて、3.1.0の拡張でリクエストメソッドでFilterを発動する/しないを切り分けれるようにしたわけだが、さらにメソッド単位でも発動する/しないが指定できるようにちょっと拡張してもいいかなと思ってきた。

[View]
success = "foo/form.html

[View:@confirm]
success = "foo/confirm.html
input   = "foo/error.html

[View:@done]
success = "foo/done.html"

3.1.0の拡張で「Filter名:REQUEST_METHOD」という形ができるようにしたが、さらに進めて、「Filter名:REQUEST_METHOD@発動method」という書式を許すということになる。(REQUEST_METHOD、発動methodも省略可。「POST」、「POST@confirm」、「@confirm」といった書式になる)

んで、この発動メソッドを入り口PHPチュートリアルでエントリポイントと呼ぶと書いたので今後はエントリポイントとしたいと思います)からどう呼び分けるかだけど、「action=foo_bar_baz-confirm」と最後に「-confirm」をつけるってのだと気軽に3.1系でも拡張できるんですがどうでしょう?(かっこ悪い・・・という声もあがりそうだな)

次の問題は受け口のメソッド名で、PHP4ではprivate宣言はないのでそれによってきりわけることもできないし、「_」で始まらないものを呼び出せるとすると getter/setter がたたかれてしまうので、これもダメ。

ということでやっぱり、以前 Hawk さんが提案されていた「execute_confirm_post」という形に落ち着くのかなと。(executeConfirmPostとできればいいが、PHP4のget_class_methodでとってきたら全部小文字で戻ってくるので、「_」区切りにするしかないすね)

この機能を駆使するとActionクラスもmaple.iniも複雑なものになる危険性が増えるわけだが、それなりのメリットがあるし、複雑になってきたなぁと思ったときには、分割して、当初のシンプルな形もできますよという選択肢が提供できるということでいいのかな。

シンプルな書き方もできるし、ちょっとやり方をかえると複雑なこともできるよという提案は結局混乱を招くだけかも・・・という心配もあるのだが、そのあたり皆さんのご意見をおききできればなあと思います。