« CGI::AppでのDebugScreen | メイン | 12 Things I dislike with CGI::Application 続き »

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
という現実

トラックバック

この一覧は、次のエントリーを参照しています: 12 Things I dislike with CGI::Application:

» [Perl]cgiapp=非モテ?な件 from 刺身☆ブーメラン(金子健介)のはてなダイアリー
結論を先に書くと、`専用のコミュニティがあったらcgiappもモテになるかも!?’みたいな感じ。ならなくてもいいと思うけど・・・w 3. あまりモテない... [詳しくはこちら]

» 12 Things I dislike with CGI::Application from MT::Neko::kak 500 Internal Server Error
https://blog.nomadscafe.jp/archives/00055... [詳しくはこちら]

コメント

runメソッドへの機能集中は私も苛ついてました。
CGI::Appは使いやすいし、個人的にはGoodなフレームワークなので、改善希望ですね。

↑私です。^^;

↑了解しましたです。
runをoverrideするのはちょっと気が引けるんですよね。

コメントを投稿