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 идеально вписывается

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

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

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector