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

Noa*_*ich 2 orm design-patterns data-mapping

给定一个域对象(例如,Person),该对象是否应包含其Data Mapper(Person_Mapper)?

例如,我可以通过以下两种不同方式执行停用操作:

$mapper = new Person_Mapper();

$person = $mapper->load(1);

$person->active = false;
$mapper->save($person);
Run Code Online (Sandbox Code Playgroud)

或者像这样:

$mapper = new Person_Mapper();

$person = $mapper->load(1);

$person->inactivate();


class Person
{
    public function inactivate()
    {
            $this->active = false;
            $this->_mapper->save($this);
    }
}
Run Code Online (Sandbox Code Playgroud)

Jam*_*s L 5

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

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