新しいblogに移行しました

新ブログ "All Yout Bugs Are Belong To Ass" に移行しました!

2008-02-24

[Perl]Class::ComponentのPluginって

もしかして、MyClass::Plugin::FooBar というプラグインを汎用化しようと思ったら、Class::Component::Plugin::FooBar て名前にしなきゃアカンのかな。。。

なんとなくDBIx::Simpleとかプラグインにしておこうかと思ったから、気になっただけなんだけど。

たとえば、こんな感じ?

package Class::Component::Plugin::DBIS;
use strict;
use warnings;
use base 'Class::Component::Plugin';
use DBIx::Simple;
use SQL::Abstract;

sub dbis_connect : Method {
my($self, $c, $args) = @_;
my $DBIS = DBIx::Simple->connect(
@{$self->{config}->{connect_info}}
);
$DBIS->abstract = SQL::Abstract->new;
return $DBIS;
}

1;


で、これを元にMyClass用プラグインをつくったら、こうなるのかな?

package MyClass::Plugin::DBIS;
use strict;
use warnings;
usr base 'Class::Component::Plugin::DBIS';
1;


試してないけど、どうなんだろう。
もう今日は眠いから、明日試すか。。。

2/24 22:33 追記。
ばっちりうまく動いた。
でも、このソースはオススメできない。

確かに、プラグインは下記のやり方でロードできた。

use MyClass;
my $c = MyClass->new({
config => {
DBIS => {
connect_info => [qw[
dbi:mysql:myapp:mydbsv
mydbuser
mydbpass
]]
}
}
load_plugins => [qw/DBIS/]
});

でも、実際にDBからselectする場合、

my $DBIS = $c->dbis_connect;
my @members = $DBIS->select(
'member',
[qw[id name mail]],
{age=>{'>=',18}}
)->hashes;

のように、いちいちdbis_connectメソッドを呼び出してDBISインスタンスを生成しなきゃならん。これはいかにも面倒だ。しかも、毎回毎回connectしてたんじゃ、オーバーヘッドがハンパ無いことに。

オイラは、

$c->plugin('DBIS')->select(
'member',
[qw[id name mail]],
{age=>{'>=',18}}
)->hashes;

としたいのに。困った。。。

もう少しソースコード追ってみるか。。。

0 件のコメント: