Catalyst::Model::なんとかAdaptor系の話

Catalyst::Model::MultiAdaptorでlifecyle support - dann's blog - #
やりたいことがいつの間にかできていた - 僕ト云フ事@はてな出張版

この辺の記事を見てて思ったこと。

Catalyst::Model::Adaptorは便利だけど、モジュールの数だけモデル化用のファイルが増えるのも微妙という話。

そこでCatalyst::Model::DynamicAdaptorやCatalyst::Model::MultiAdaptorとかでその辺を解決という話なんだけど、
パッケージ以下全部を読み込みって言うのが僕の今回の用途に合わないので、個人的にこんな感じで書けたらいいのかなぁという案だけちょっと考えてみた。

__PACKAGE__->config(
    package => {
        'TestApp::Service::*' => {
            lifecycle => 'Singleton',
            config => {},
            subclass => {
                'SomeClass' => {
                    lifecycle => 'PerRequest',
                    config => {},
                }
            },
        },
        'TestApp::Logic::*' => {
            lifecycle => 'Singleton',
            config => sub {
                my ($self,$c) = @_;
            },
        },
        'TestApp::Foo' => {
            lifecycle => 'PerRequest',
            config => {
                id => 1,
            },
        },
        'TestApp::Bar' => {
            lifecycle => 'Singleton',
            config => sub {
                my ($self,$c) = @_;
            },
        }
    }
);

TestApp::Service::*のようにアスタリスクをつけたときだけパッケージ以下を全て読み込むとかどうだろう。

複数モジュールも単品モジュールも全部一つにまとめて書けるようにすれば、いちいちモデル用のファイルを生成しなくていいので便利かな。

んでもってconfigに無名サブルーチン渡せるようにしといて初期処理で$cを自由に使用できるようにすれば個人的にはスゲー便利。個人的にね><

あとPerRequest系のモデルってみんな使わないのかな?僕の場合はPerRequestのモデルの方が多いんだけど・・・。

ユーザーからの情報を受け取って処理するモデルが結構あるから自然とPerRequestになるんだけどもしかしてそーゆーのはモデル化するのに相応しくないとか?

モデルというか一リクエスト中に各コントローラー間で使いまわせるオブジェクトというべきか。

まーPerRequestの実装としてはnewの隠蔽とstashに突っ込んでキャッシュしてるだけなので、Catalyst::Model::Adaptorでやらずに自分で実装しろってことかな?んー。


追記

追記というか余談。

ちなみにPOPOモデルって何?と思って調べてみたらPlain Old Perl Objectの略だとか。

ナニコレ?誰かの造語かな?と思ったらPOJO(Plain Old Java Object)ってのがあって、どうやらそれをパロった感じだろうか。いや、インスパイアされたというべきか。

以上、余談でした。