Re: Data::Validator::Managerなるものを書いてみた

http://karupanerura.hateblo.jp/entry/2012/07/01/183432

メソッドや関数の引数をバリデーションするときにData::Validatorを使わせて貰っているのですが、
低レベルAPIと高レベルAPIで同じバリデーションルールを適用したい事があって、
そういうときに複数箇所にコピペして使ったりしていると、
低レベルAPIのインターフェースを変えたくなったときにそれに依存している高レベルAPIのバリデーションルールも変える必要があってだるかったり、
そもそもクローンとも言えるオブジェクトが複数ヶ所で静的変数に保持されているのは無駄なのではないか。
あと、そもそも5.10未満では静的変数は使えないので5.8しか使えない環境とかで使いたくなったとき困るのではないか*1とか、そんな事を思ったので、
そんな問題を解消するモジュールを書いてみました。

自分だったらベタにクロージャーをつかうかな、とおもいました。

package MyApp::Model;

use Data::Validator;

my $validator_model_get = Data::Validator->new(
    key => {isa => 'Str'},
);

sub get_with_cache {
    my $self = shift;
    my $args = $validator_model_get->validate(@_);
    "GET_WITH_CACHE: $args->{key}";
}

sub get {
    my $self = shift;
    my $args = $validator_model_get->validate(@_);
    "GET: $args->{key}";
}

sub delete_cache {
    my $self = shift;
    my $args = $validator_model_get->validate(@_);
    "DELETED: $args->{key}";
}
use Test::More;

is(MyApp::Model->get_with_cache(key => "OK"), 'GET_WITH_CACHE: OK');

done_testing;

Published: 2012-07-01(Sun) 10:12