从域实体方法内检索依赖/父级
题
如何从实体中检索依赖/父对象。
$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 个问题(如果我可以解释的话):
- 如何从实体中检索依赖/父对象?
- 是
$person->getAddress()
从数据库中检索人的地址对象的一种好方法? - 如果这是一个好方法,那么代码会是什么样子?
- 可以在 getAddress 方法中使用 $domain 对象吗?
- 可以在 Person 类中保存关系信息吗?
就答案而言:
- 在这种情况下
$person->getAddress()
看起来是一个不错的选择,你知道,漂亮且具有描述性。;-) - 我没有看到问题:人 有一个 地址,要获取您向人员对象询问的地址,请执行以下操作:
- 给定的代码示例似乎回答了这个问题,尽管它有点混乱。我只是将地址设置为成员对象,但除此之外它基本上是相同的
- & 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;
}
}
不隶属于 StackOverflow