我有一个 Moose BaseDBModel,它有不同的子类映射到我在数据库中的表。子类中的所有方法都像“get_xxx”或“update_xxx”,指的是不同的数据库操作。
现在我想为所有这些方法实现一个缓存系统,所以我的想法是“在”所有名为“get_xxx”的方法之前,我将在我的 memcache 池中搜索方法的名称作为键值。如果我找到了值,那么我将直接返回该值而不是方法。
理想情况下,我的代码是这样的
基础数据库模型
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 的页面,因此我可以看到一条警告消息
代码:
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 方法都会被修改,这是我不想要的