Data Mapper - 我应该使用依赖注入吗?

时间:2016-01-10 05:35:08

标签: php design-patterns dependency-injection datamapper

我应该在数据映射器模式中将模型作为依赖注入传递,还是应该在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 个答案:

答案 0 :(得分:1)

映射器应创建对象,无论是单独使用还是使用工厂。注入"空"对象,然后总是返回相同的对象,但使用不同的数据没有多大意义。

你应该注射工厂吗?将对象创建和对象使用分开是一个好主意。但恕我直言,数据映射器属于对象创建类别本身,因此$model = new Model非常适合。

另一个评论:在您的第一个示例中,您将注入具有无效状态的模型,即未初始化。允许无效状态可能导致错误,并且最好避免。

实际上你在第二个例子中也允许无效状态,至少在理论上如此。我建议通过构造函数而不是setter传递所需的数据,以确保Model的实例始终有效。