mik*_*ark 6 perl moose dbix-class
拥有我的Moose课程似乎有点痛苦.然后使用DBIx :: Class获取结果集..然后手动将我的结果集映射到moose类.
如果您必须在Moose类和DBIC模式之间来回映射,您可能希望查看像KiokuDB这样的持久对象存储.
您丢失了关系数据库的一些功能,特别是如果您有现有架构但是您获得了很多功能,主要是在数据存储和对象模型之间进行静默映射.KiokuDB的DBI后端可能就是这种权衡的最好例子.数据库被高度去规范化,但这是因为它有效地作为密钥库.
但是,KiokuDB可以使用针对此类数据进行优化的存储引擎.它支持当前的一些"NoSQL"名人,包括CouchDB和MongoDB.它还支持老款粉丝最喜爱的BerkelyDB.
Kioku不是每个问题的答案,但它非常成功地用于Parking Mobility无缝处理所有数据存储.
小智 3
您可以将 Moose 与 DBIC 一起使用,没有问题。实际上,我喜欢使用 MooseX::Declare,因为我发现扩展语法在设计可靠的公共 api 时非常有用,例如:
use MooseX::Declare;
class MyApp::Schema::Result::Geo::Division
extends MyApp::Schema::Result {
use Locale::Geocode::Division;
__PACKAGE__->table('division');
__PACKAGE__->add_columns(
fk_territory_id => {
data_type => 'char',
size => '36',
},
division_id => {
data_type => 'char',
size => '36',
},
code => {
data_type => 'varchar',
size => '5',
},
created => {
data_type => 'datetime',
set_on_create => 1,
},
);
__PACKAGE__->set_primary_key('fk_territory_id','division_id');
__PACKAGE__->uuid_columns('division_id');
__PACKAGE__->add_unique_constraint(['fk_territory_id','code']);
__PACKAGE__->belongs_to(
territory => 'MyApp::Schema::Result::Geo::Territory',
{'foreign.territory_id' => 'self.fk_territory_id'},
);
method as_geocode_division {
Locale::Geocode::Division->new($self->code);
}
__PACKAGE__->meta->make_immutable(inline_constructor => 0);
} 1;
Run Code Online (Sandbox Code Playgroud)