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やめようかなーなんて少し考え中。