北海道苫小牧市出身の初老PGが書くブログ

永遠のプログラマを夢見る、苫小牧市出身のおじさんのちらしの裏

O/Rマッピングとロジック

Class::DBIを使っているときに、ロジックが検索SQLとメソッドに別れてしまって非常に不便。例えば、「年収1,000万以上で身長が180cm以上の男性をAランクとする」と言うルールがある場合、検索ではSQLを使いたいので

if($is_rank_a){
	$sql .= q/SEX = 1 and NENSYU >= 1000 and HEIGHT >= 180/;
}

などと言うコードが出てくる。でも、これだとひとつひとつのオブジェクトがランクAかわからないので、このオブジェクトのメソッドには、

sub is_rank_a{
	my $self = shift;
	return $self->sex == 1 && 
	       $self->nensyu >= 1000 && 
	       $self->height >= 180;
}

などと言う、大変冗長なコードが出てくる。気持ち悪いッス。

この、"ルール"を抽象化して、それをperlのコードとしてもSQLとしても使えるようにするクラスがあれば便利ですね。もうすでにCPANにあるような気がするんですが、知ってる人が居たら教えてくださいm(_ _)m。