0

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

$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 类中是否可以?

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

4

2 回答 2

3

Take a look at Zend_Db_Table Relationships. They allow doing exactly that, and much more. You can just use Zend_Db_Table today, instead of trying to come up with your own implementation, or you can study Zend Framework's code for their design decisions wrt to your questions. It's quite an authoritative source.

于 2009-12-28T15:31:33.907 回答
2

首先,我认为问题的标题不是很清楚,其次我不完全确定我是否理解所问的内容......在我看来,标题和帖子都应该进行编辑以清理一下。

该帖子似乎包含5个问题(如果我可以解释的话):

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

就答案而言:

  1. 在这种情况下$person->getAddress(),您知道,这似乎是一个不错的选择,而且具有描述性。;-)
  2. 我没有看到问题:Person HAS A Address,要获得您向 person 对象询问的地址。
  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;
    }
}
于 2009-12-26T14:11:06.060 回答