寻求一些最佳实践建议。 基本上我有一个由各种属性组成的大型实体,其中一些属性是其他实体。
在我的datamapper中“实例化”大实体的最佳做法是什么?我是否在其“主”映射器中为其他实体调用其他映射器?例如,我有一个实体“Big”,它由各种属性组成,其中“customer”属性是一个客户实体,这是最好的方式吗?
class BigMapper{
//Find and return a BigEntity
function find($id){
$customerMapper = new CustomerMapper($this->db);
$customer = $customerMapper->findByBigEntityId($id);
$bigRow = $this->db->fetchRow('SELECT * FROM big WHERE id = ?', $id);
$bigRow['customer'] = $customer; //This line feels sort of ugly.... and then:
return( new EntityBig($bigRow) );
}
}
我见过一些解决方案,人们在服务层实例化其他映射器,然后自行验证每个实体,最后将它们全部组合等,但我真的不确定“构建”的最佳方式是什么基于其他几个实体的大型实体。
任何评论或帮助表示感谢,谢谢!
答案 0 :(得分:1)
如果您同时拥有数据层中的所有属性,最好将它们全部映射。这将使大实体本身完整。
但是如果你需要做懒人加载。 您不需要一次性获取所有数据(即客户实体),您可以先映射客户实体的ID。如果以后需要,您可以调用数据库以根据其ID获取客户实体,然后在Big Entity中映射Customer实体。