如何从实体中检索依赖/父对象。

$person->getAddress();

这应该从数据库中检索该人的地址对象并将其作为对象返回。这是一个好方法吗?如果可以的话,代码应该是什么样子。

这样做意味着对象本身应该知道地址是与其相关的实体/值对象。为什么我想要这种语法是因为它在表示层中看起来很干净。

person 类看起来像这样:

class Person {
  protected $_domain = null; // domain is assigned when instantiated
  protected $_data = array('name', 'address');
  protected $_relations = array(
    'address'=>array(
      'class'=>'Address'
    )
  );
  protected $_retrievedRelations = array();
  public function getAddress() {
    if (array_key_exists('address', $this->_relations) ) {
      if (!array_key_exists('address', $this->_retrievedRelations) ) {
        $this->_retrievedRelations['address'] = $this->_domain->getAddress($this->_data['address']);
      }

      return $this->_retrievedRelations['address'];
    }

    return $this->_data['address'];
  }
}

那么可以在 getAddress 方法中使用 $domain 对象并将关系信息保留在 Person 类中吗?

请回答,因为我一直在寻找答案。

有帮助吗?

解决方案

查看 Zend_Db_Table Relationships 。他们可以做到这一点,甚至更多。你今天可以使用 Zend_Db_Table ,而不是试图想出你自己的实现,或者你可以研究Zend Framework的代码,用于他们的设计决定。这是一个权威的来源。

其他提示

首先,我认为这个问题的标题不太清楚,其次,我不确定我明白了什么。在我看来,标题和帖子确实应该进行编辑以使其更加干净。

这篇文章似乎包含 5 个问题(如果我可以解释的话):

  1. 如何从实体中检索依赖/父对象?
  2. $person->getAddress() 从数据库中检索人的地址对象的一种好方法?
  3. 如果这是一个好方法,那么代码会是什么样子?
  4. 可以在 getAddress 方法中使用 $domain 对象吗?
  5. 可以在 Person 类中保存关系信息吗?

就答案而言:

  1. 在这种情况下 $person->getAddress() 看起来是一个不错的选择,你知道,漂亮且具有描述性。;-)
  2. 我没有看到问题:人 有一个 地址,要获取您向人员对象询问的地址,请执行以下操作:
  3. 给定的代码示例似乎回答了这个问题,尽管它有点混乱。我只是将地址设置为成员对象,但除此之外它基本上是相同的
  4. & 5.我想说主要是品味、优先级和设计依赖性的问题。对此确实没有一个明确的答案。另外,我们在这里争论的是语义还是现实生活场景?

一些与答案 Nr.3 相关的代码:(我无法让它在列表中正常工作)

class Person {
    protected $_domain = null; // domain is assigned when instantiated
    protected $_address;        // object

    public function getAddress() {
        if (!isset($this->_address) ) {
            $this->_address = $this->_domain->getAddressForPerson($this); // assuming $this contains some sort of ID
        }
        return $this->_address;
    }
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top