2016-01-10 4 views
1

Должен ли я передавать модель в виде инъекции зависимостей в шаблоне сопоставления данных или я должен объявить модель внутри класса сопоставления?Data Mapper - следует ли использовать инъекцию зависимостей?

class Mapper 
{ 
    public function __construct(
     $model 
    ) 
    { 
     $this->model = $model; 
    } 

    public function mapObject(array $row) 
    { 
     $this->model->setArticleId($row['article_id']) ; 
     $this->model->setTitle($row['title']); 
     $this->model->setDescription($row['description']); 
     $this->model->setContent(isset($row['content']) ? $row['content'] : null); 
     $this->model->setTemplate(isset($row['template']) ? $row['template']['path'] : null); 

     return $this->model; 
    } 
} 

или:

class Mapper 
{ 
    public function mapObject(array $row) 
    { 
     $model = new Model; 
     $model->setArticleId($row['article_id']) ; 
     $model->setTitle($row['title']); 
     $model->setDescription($row['description']); 
     $model->setContent(isset($row['content']) ? $row['content'] : null); 
     $model->setTemplate(isset($row['template']) ? $row['template']['path'] : null); 

     return $model; 
    } 
} 

Какой из них правильный?

ответ

1

Координатор должен создать объекты, будь то самостоятельно или с использованием фабрики. Внедрение «пустого» объекта, а затем всегда возвращает тот же объект, но с разными данными не имеет большого смысла.

Следует ли вводить завод? Это хорошая идея для разделения создания объектов и использования объектов. Но ИМХО, картограф данных попадает в категорию создания объекта, поэтому $model = new Model идеально подходит.

Другое замечание. В первом примере вы должны ввести модель с недействительным состоянием, то есть неинициализированным. Разрешение недопустимого состояния может привести к ошибкам, и этого следует избегать.

Фактически вы также допускаете неверное состояние во втором примере, по крайней мере теоретически. Я бы рекомендовал передать необходимые данные через конструктор вместо setter, чтобы убедиться, что экземпляры Model всегда действительны.

+0

благодарит за ответ. «В первом примере вы должны ввести модель с недопустимым состоянием, то есть неинициализированным. Разрешение недопустимого состояния может привести к ошибкам, и этого следует избегать ». Я не совсем понимаю это? не могли бы вы привести нам пример? благодаря! – laukok

+1

Если вы позволяете модели иметь недопустимые (пустые) свойства в любой момент, вам нужно проверять ее достоверность каждый раз, когда вы ее используете, иначе вы не можете быть уверены, что она была инициализирована правильно. На программистах есть хорошая тема. По теме: http://programmers.stackexchange.com/questions/261585/should-a-getter-throw-an-exception-if-its-object-has-invalid- государство –

Смежные вопросы