[英]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.