データベース内のテーブルにマッピングされるさまざまなサブクラスを持つ Moose BaseDBModel があります。サブクラスのすべてのメソッドは、さまざまな DB 操作を参照する「get_xxx」または「update_xxx」のようなものです。
今、私はこれらすべてのメソッドにキャッシュシステムを実装したいので、私のアイデアは「get_xxx」のような名前のすべてのメソッドの「前」にあり、メソッドの名前を memcache プールのキーとして値を検索します。値が見つかった場合は、メソッドではなく値を直接返します。
理想的には、私のコードは次のようになります
BaseDBModel
package Speed::Module::BaseDBModel;
use Moose;
sub BUILD {
my $self = shift;
for my $method ($self->meta->get_method_list()){
if($method =~ /^get_/){
$self->meta->add_before_method_modifier($method,sub {
warn $method;
find_value_by_method_name($method);
[return_value_if_found_value]
});
}
}
}
サブクラスの例 1
package Speed::Module::Character;
use Moose;
extends 'Speed::Module::BaseDBModel';
method get_character_by_id {
xxxx
}
今私の問題は、私のプログラムが実行されているときに、メソッドを繰り返し変更していることです。次に例を示します。
アパッチを再起動する
get_character_by_id を呼び出すページにアクセスすると、1 つの警告メッセージが表示されます。
コード:
my $db_character = Speed::Module::Character->new(glr => $self->glr);
$character_state = $db_character->get_character_by_id($cid);
警告:
get_character_by_id at /Users/dyk/Sites/speed/lib/Speed/Module/BaseDBModel.pm line 60.
しかし、ページを更新すると、2 つの警告メッセージが表示されました
警告:
get_character_by_id at /Users/dyk/Sites/speed/lib/Speed/Module/BaseDBModel.pm line 60.
get_character_by_id at /Users/dyk/Sites/speed/lib/Speed/Module/BaseDBModel.pm line 60.
Apache で mod_perl 2.0 を使用しています。ページを更新するたびに、不要な get_character_by_id メソッドが変更されます。