12 Things I dislike with CGI::Application
タイトルはmiyagawaさんからインスパイア。12個も書いてない。
1.runメソッドへ機能が集中しすぎ
CGI::Applicationをいじり始めると気になるのは、runメソッドへ機能が集中しすぎているところだと思う。
しかもちょっとスパゲティ。
sub run { my $self = shift; my $q = $self->query();#クエリーを呼び出し #RUNMODEの決定 my $rm_param = $self->mode_param() || croak("No rm_param() specified");# my $rm; if (ref($rm_param) eq 'CODE') { $rm = $rm_param->($self); 〜〜〜略〜〜〜 #__CURRENT_RUNMODEにRUNMODEを挿入 $self->{__CURRENT_RUNMODE} = $rm; 〜〜〜略〜〜〜 #prerun hookの呼び出し。$rm $self->call_hook('prerun', $rm); 〜〜〜略〜〜〜 #prerun_modeがあればそれを使う。 my $prerun_mode = $self->prerun_mode(); if (length($prerun_mode)) { $rm = $prerun_mode; $self->{__CURRENT_RUNMODE} = $rm; } #RUNMODEから実行するメソッドを求める。 my %rmodes = ($self->run_modes()); my $rmeth; my $autoload_mode = 0; if (exists($rmodes{$rm})) { $rmeth = $rmodes{$rm}; 〜〜〜略〜〜〜 } #実行。ここだけeval my $body; eval { $body = $autoload_mode ? $self->$rmeth($rm) : $self->$rmeth(); }; if ($@) { #エラーがあればそれを表示 〜〜〜略〜〜〜 } 〜〜〜あとはレスポンスに関わるところ〜〜〜 return $output; }
ずいぶん省略したけど、まだまだ長い。
分かれていないという事は、一部分だけ処理に変更を加えたいと思ってもできない。call_hookだけでは限界がある。
2. runの中でのよくわからないcroak
できればevalブロックの中にいれて補足できるように。prerun、postrunもevalの中だとうれしい。
3. あまりモテない
はてなブックマークのブックマーク件数があきらかに
Class::DBI > Catalyst >>超えられない壁 >> CGI::Application
という現実
コメント
runメソッドへの機能集中は私も苛ついてました。
CGI::Appは使いやすいし、個人的にはGoodなフレームワークなので、改善希望ですね。
投稿者: Anonymous | 2005年12月15日 20:10
↑私です。^^;
投稿者: nekokak | 2005年12月15日 20:21
↑了解しましたです。
runをoverrideするのはちょっと気が引けるんですよね。
投稿者: かぜぶろ | 2005年12月15日 20:48