Catalyst::Model::DynamicAdaptorってのもあるけど

昨日の記事id:vkgtaroさんが「DynamicAdaptor で読み込みまくってる。」って言ってたので少し調べてみた。

なかなか良さげ。

でもコンストラクタに渡す引数を個別に定義できないっぽいのでちょっと今回の用途に合わないなー。myapp.ymlからModelへの引数も設定できないっぽいし。

newでは何もしないっていうスタンスなのであれば問題ないんだろうけどね。

んー、それとも同じ引数同士のモジュールで名前空間を予め分けて

 package App::Web::Model::Logic;
 use base qw/Catalyst::Model::DynamicAdaptor/;
 __PACKAGE__->config(
    class => 'App::Logic',
    config => { foo => 'foo' },
 );

 package App::Web::Model::Logic2;
 use base qw/Catalyst::Model::DynamicAdaptor/;
 __PACKAGE__->config(
    class => 'App::Logic2',
    config => { bar => 'bar' },
 );

みたいな感じでやるのかな?これはこれで微妙か・・・。

あとCatalystから取得できる値を利用してnewとか出来たらいいのにな。

例えば以下のような設定をできるようにして・・・

 package App::Web::Model::Logic;
 use base qw/Catalyst::Model::DynamicAdaptor/;
 __PACKAGE__->config(
    class => 'App::Logic',
    config => sub {
        return shift->req->mobile_agent->user_id;
    },
 );

とかみたいな感じで書けたり。

まぁ個別に引数が必要ならやっぱ個別にCatalyst::Model::Adaptorした方がいいね。

コンストラクタが共通化されてて且つ名前空間を統一(App::Logicのように)できるようなケースでは、一つ一つファイル作らなくていい分Catalyst::Model::DynamicAdaptorの方が断然楽。



・・・っていう理解であってるかな?

ドキュメント&ソース読んだだけでまだ使ってないもので・・・。

もうちょいまとまった時間が取れたら触ってみようかな。