Catalystの不満なところ
- Modelって必要?効果的な使い道が思いつかない。MVCって言いたいだけちゃうんかと。。。
- Apache2::Reloadに対応していない。Catalyst::Engine::HTTP::Restarterだと再起動に時間がかかるし。。。これはかなり痛い。
- 指定できるURIマッピングが柔軟すぎる。まあこれはPrivateとLocalのみ使用可能とするルールで乗り切れるけども。
- 全体的にごちゃごちゃし過ぎな気がする。
- 「View::Templateを使うためにstash->{template}にテンプレート名を入れる」とか(´・ω・`)ショボーンってなる。MyTemplate->process('テンプレート名', {データ})でいいやん・・・って。
結局自分が欲しいものってDispatcherだけな気がする。
以前自作して使っているMyFrameworkをちょこっと紹介。
ディレクトリ構造はこんな感じ。ディレクトリ構造そのものがApacheに対応しているので、/www/をドキュメントルートにすればOK。
/www/conf /www/htdocs/NonMobile /www/htdocs/DoCoMo /www/htdocs/Vodafone /www/htdocs/EZweb /www/lib/Controller /www/lib/Schema /www/logs /www/t
- htdocs以下は、静的リソースを可能な限りApacheで処理したいがための処置。UAに応じてアプリケーション側で動的に振り分けってのを極力排除。
- テンプレートも静的リソースと同じディレクトリにぶち込む。テンプレートと静的リソースの区別は拡張子があるかないか。
- 拡張子無しリソースへのアクセスはアプリケーション側へ飛ぶようになっている。
Dispatcherは、URL中のディレクトリをパッケージ名とみなしてハンドラを呼び出す。
CGIとModPerlに対応。もちろんApache2::Reloadにも対応してる。(CGI用には/www/cgi-bin/dispatch.cgiってのが用意されている)
各パッケージの中身は
sub handler : handler { my $self = shift; $self->query->isa('CGI'); $self->template->isa('Template'); $self->agent->isa('HTTP::MobileAgent'); }
ってなぐらいのもので、Framework自体の習得なんて不要。
Catalystはやればやるほど「ん〜?」なところが見えてきて、Strutsの嫌な面と被ってくる。Catalystやめようかなーなんて少し考え中。