域对象是否应包含其映射器?

时间:2009-01-21 22:15:26

标签: design-patterns orm data-mapping

给定一个域对象(例如,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);
    }
}

2 个答案:

答案 0 :(得分:5)

Person类应该只知道Person的东西,因此不应该包含任何与数据映射有关的内容。

请参阅http://en.wikipedia.org/wiki/Single_responsibility_principle

答案 1 :(得分:1)

我对DAO模式和Data Mapper模式之间的关系有点不清楚,但是对于DAO,Person对象将返回一个将inactive字段设置为true的传输对象,并将其交给Person DAO要照顾。人物对象根本不应该从持久性中知道。