tokuhirom's Blog

Amon と Helper と Catalyst と Model の話

Akismet の perl モジュールをさがしてる途中で、Catayst::Model::Akismet ってのをみつけた。昔の Cat はこんなものをいちいち CPAN にあげてたのかー、とおもうとちょっとおもしろい。

このために Catalyst::Helper::Akismet とかわざわざ用意するとか、ありえん。そんなに頻繁につかうわけでもなし、SYNOPSIS をコピペすりゃー、いいレベルだ。

Helper つかってがんばる云々はほぼ毎度つかう ORM/Template Engine ぐらいで十分で、それ以外のものは、ときどきしかつかわないんだから、helper で自動生成するメリットが薄い。メリットがうすいから、まともにメンテされない。まともにメンテされないぐらいなら最初からない方がいいし、そもそもこんなもの真面目にメンテするのは時間の無駄というものだ。

というわけで、最近の Catalyst では、Catalyst::Modelをがんばってイチイチつくるのはやめて、Catalyst::Model::Adaptor とかつかうようになってる。

Sledge つかってたとき、Cat の人達は Catalyst::Model::* をがんばってアップロードしてるから、なにかすごい意味があるのかなーと昔はおもってたんですが、まあ得に意味はなかったんだなー、と最近になっておもう。「しちめんどくさいことをわざわざやってるんだから、なにか意味があるんだろう」っていうのは、意外とはずれてる、ということ。

Amon ではそもそも Catalyst::Model::Adapter とかでクラスをイチイチつくんのもアホくさいよね、ということで以下のような形式で書けるようにした。

use Net::Akismet;
__PACKAGE__->add_factory(
   Akismet => sub {
      my ($c, $klass, $conf) = @_;
      Net::Akismet->new(%$conf);
   }
);

こうしておけば、以下のようにして、インタンスをとりだせる。

$c->get('Akismet')->check(...);

この方式は Ark を参考にしたような気がする。が、どこからもってきたかよくおぼえてない。

そんな水曜の夜。