我使用Moose来表示存储在SQL数据库中的持久数据的对象。
给出一个示例SQL表' people':
id - unsigned int
name - varchar(200)
email - varchar(200)
phone - varchar(200)
我想要实例化
my $person = Person->new( id => 123 );
将$ person-> id设置为123,但尚未从SQL表中加载id = 123的行。然而,
my $name = $person->name;
将从SQL数据库中延迟加载整行,并将名称设置为$ name。后来,
my $address = $person->address;
将使用已经延迟加载的行,并将地址设置为$ address。
任何建议&模式?
奖励积分可获得优雅的子类化的答案,例如: Person :: Employee具有其他属性,例如“job_title',' salary'”,并包括如何在SQL' people'中最好地存储其他子类属性。表(或多个表,也许' people_employee'?)
或者,如果我以完全错误的方式解决这个问题,那么也应该知道这一点!我非常了解ORM(例如DBIx :: Class),但并不喜欢api,并且还计划为不涉及SQL的对象添加大量功能桌子,这似乎是穆斯的理想选择。