DBIx::MoCoと戯れる

最近仕事で DBIx::MoCo を使ってる。実装が軽いのとリストメソッドチェーンが気持ち良くて、データベーステーブルありきの実装の際は一番簡単にO/Rマッパを実装できるんじゃないかな。

ところが、はまった箇所があったので、忘れないようメモ。

retrieve_or_create メソッドは以下のように説明があるけど

Retrieves a object or creates new record with given data and returns that.

普通にwhere句を渡すと問題がある。条件をいくら渡してもプライマリーキーに関連する条件しか加味しないようになっているじゃないか。(5行目)

sub retrieve_or_create {
    my $class = shift;
    my %args = @_;
    my %keys;
    @keys{@{$class->primary_keys}} = @args{@{$class->primary_keys}};
    $class->retrieve(%keys) || $class->create(%args);
}

キャッシュするときのキーを正規化するため?DBIx::Class と同じ雰囲気で利用しているとはまるだろう。

とはいえ、どんな場面でもいきなり MyApp::Schema::Foo->search(%opt) のように簡単にアクセスできるのは非常に楽。Perl界のはやりとしては Moose にスポットがあたってるが、MoCoもなかなかどうしていいんじゃないかしら。

コメントする

aws+ logo

About Me

フリーランスで、テクニカルディレクターたまにプログラマーをやっている後藤和貴(ごとうかずたか)です。

最近はAWSなどクラウドコンピューティングに興味あり。導入支援サービスAWS+はじめました

自己紹介的なものはまだ書いてないので、ひとまずこちら

連絡先は kaz.goto[at]gmail.com。

最近のブログ記事

閉じる