给定一个域对象(例如,Person),该对象是否应包含其Data Mapper(Person_Mapper)?
例如,我可以通过以下两种不同方式执行停用操作:
$mapper = new Person_Mapper();
$person = $mapper->load(1);
$person->active = false;
$mapper->save($person);
或者像这样:
$mapper = new Person_Mapper();
$person = $mapper->load(1);
$person->inactivate();
class Person
{
public function inactivate()
{
$this->active = false;
$this->_mapper->save($this);
}
}
答案 0 :(得分:5)
Person类应该只知道Person的东西,因此不应该包含任何与数据映射有关的内容。
请参阅http://en.wikipedia.org/wiki/Single_responsibility_principle
答案 1 :(得分:1)
我对DAO模式和Data Mapper模式之间的关系有点不清楚,但是对于DAO,Person对象将返回一个将inactive字段设置为true的传输对象,并将其交给Person DAO要照顾。人物对象根本不应该从持久性中知道。