簡體   English   中英

數據映射器-我應該使用依賴注入嗎?

[英]Data Mapper - should I use dependency injection?

我應該將模型作為數據映射器模式中的依賴項注入傳遞,還是應該在映射器類中聲明模型?

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;
    }
}

哪一個是正確的?

映射器應該創建對象,無論是單獨創建還是使用工廠。 注入一個“空”對象,然后總是返回相同的對象,但使用不同的數據沒有多大意義。

你應該注入工廠嗎? 分離對象創建和對象用法是個好主意。 但是恕我直言,數據映射器本身屬於對象創建類別,因此$model = new Model非常合適。

另一個說明:在第一個示例中,您將為模型注入無效狀態,即未初始化。 允許無效狀態會導致錯誤,因此可以避免。

實際上,至少在理論上,您也可以在第二個示例中允許無效狀態。 我建議通過構造函數而不是setter傳遞所需的數據,以確保Model實例始終有效。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM