Mixinについて #12B!

こんにちわ!nekokakです!

十二日目はDBIx::SkinnyでのMixinについてです。

DBIx::Skinnyにはsearch/create/update/delete...などの基本的なメソッドが提供されています。

特定のプロジェクトでDBIx::Skinnyが提供していないようなメソッドを定義したい場合もあるかとおもいます。

その場合は以下のように書くことでメソッドを定義できます。

package Proj::DB;
use DBIx::Skinny;
sub some_method { 'somesome' }
1;

このようにDBIx::Skinnyをuseしているモジュール内でメソッドを定義するだけです。

そのプロジェクトでしか使わないようなメソッドであればこれでもいいとおもいますが、

よく使うようなメソッドを毎回このように定義するのはだるいですよね。

コピペはよくありません。

そこでDBIx::Skinny::Mixinの登場です。

DBIx::Skinny::Mixinをつかえば、よく使うメソッドを別パッケージで定義しておき、

必要に応じてmixinさせることが可能になります。

たとえば、よく使うsome_methodというメソッドでためしてみましょう。

package Your::Mixin;
use strict;
use warnings;
sub register_method {
    +{
        some_method => sub { 'somesome' },
    };
}

Your::Mixinというパッケージを用意しました。

Your::Mixinの中でregister_methodを定義します。

register_method は HASH リファレンスを返して、

key が生やしたいメソッド名 value は、そのメソッドのコードリファレンスを渡します。

mixin で追加したメソッドの第一引数にはDBIx::Skinnyのオブジェクトが渡され、

第二引数以降はユーザによって渡された引数がそのまま入ります。

mixinを作ったらそれをProj::DBで使えるようにしてみましょう。

package Proj::DB;
use DBIx::Skinny;
use DBIx::Skinny::Mixin modules => ['+Your::Mixin'];
1;

このようにDBIx::Skinny::Mixinの1行を追加するだけです。

こうすることで今回指定したYour::Mixinのregister_methodで定義されたmethodが

Proj::DBでつかえるようになります。

Mixin機能を使えばDBIx::Skinnyを簡単に拡張することができますので

つかってみてください。

明日はRowクラスの拡張について書きます。

have a nice skinny days!:)