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