DataMapper具有多个实体

时间:2012-08-19 13:37:53

标签: php datamapper entities

寻求一些最佳实践建议。 基本上我有一个由各种属性组成的大型实体,其中一些属性是其他实体。

在我的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) );
  }

}

我见过一些解决方案,人们在服务层实例化其他映射器,然后自行验证每个实体,最后将它们全部组合等,但我真的不确定“构建”的最佳方式是什么基于其他几个实体的大型实体。

任何评论或帮助表示感谢,谢谢!

1 个答案:

答案 0 :(得分:1)

如果您同时拥有数据层中的所有属性,最好将它们全部映射。这将使大实体本身完整。

但是如果你需要做懒人加载。 您不需要一次性获取所有数据(即客户实体),您可以先映射客户实体的ID。如果以后需要,您可以调用数据库以根据其ID获取客户实体,然后在Big Entity中映射Customer实体。