数据映射器——我应该使用依赖注入吗?
Data Mapper - should I use dependency injection?
我应该在数据映射器模式中将模型作为依赖项注入传递,还是应该在映射器中声明模型class?
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;
}
}
哪个是正确的?
映射器应该创建 对象,无论是自己还是使用工厂。注入一个 "empty" 对象,然后总是 return 相同的对象但具有不同的数据没有多大意义。
你应该注入工厂吗?将对象创建和对象使用分开是个好主意。但恕我直言,数据映射器本身属于对象创建类别,因此 $model = new Model
非常适合。
另一条评论:在您的第一个示例中,您将向模型注入无效状态,即未初始化。允许无效状态会导致错误,最好避免。
实际上,您在第二个示例中也允许无效状态,至少在理论上是这样。我建议通过构造函数而不是 setter 传递所需的数据,以确保 Model
的实例始终有效。
我应该在数据映射器模式中将模型作为依赖项注入传递,还是应该在映射器中声明模型class?
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;
}
}
哪个是正确的?
映射器应该创建 对象,无论是自己还是使用工厂。注入一个 "empty" 对象,然后总是 return 相同的对象但具有不同的数据没有多大意义。
你应该注入工厂吗?将对象创建和对象使用分开是个好主意。但恕我直言,数据映射器本身属于对象创建类别,因此 $model = new Model
非常适合。
另一条评论:在您的第一个示例中,您将向模型注入无效状态,即未初始化。允许无效状态会导致错误,最好避免。
实际上,您在第二个示例中也允许无效状态,至少在理论上是这样。我建议通过构造函数而不是 setter 传递所需的数据,以确保 Model
的实例始终有效。