MVC の実現の仕方(私の場合)

以下のエントリを拝見させて頂いて、思った事のメモ。
MVCのモデルはDBじゃなくてもいいんだよ - D-6 相変わらず根無し

個人差があるかとは思いますが、Catalyst を使っていると、 C のテストを書く行為を、私は、そんなに苦に感じない。ただ、C は URI リソースと M を繋ぐラッパと割り切り、複雑なビジネスロジックは M に押し付ける方が、コードがスッキリするし、M 自体を汎用的にできそう。

MVCのモデルはDBじゃなくてもいいんだよ - D-6 相変わらず根無し

じゃあ元々のブクマコメントのModel::DBICはどうすんだよ、いらないのかよ、みたいなところに行き着くかと思うのだが、そこはそれ、モデルに「格納先」を指定するのにDBを抽象化したModel::DBICを使ってやる、っていう手もある

my $c = shift; # Catalyst的なcontextがあると仮定します
MyApp::Model::BlogEntry->create({
    storage => $c->model('DBIC::BlogStorageSchema'),
    blog  => $blog,
    title => $entry_title,
    content => $entry_content
});

これで全く問題なくDBICの良いところを使える。

Catalyst::Model::Adaptor でラップして MyApp::Model::BlogEntry を作り、prepare_arguments を下記のようにすれば・・・

sub prepare_arguments {
    my ($self, $app) = @_;
    return {
        storage => $app->model('DBIC::BlogStorageSchema'),
        map {$_ => $app->req->param($_)} qw(blog title content),
    };
}

C の中で実際に使う際には

$c->model('BlogEntry')->create;

で行けるかな?