【发布时间】:2016-01-07 22:46:15
【问题描述】:
我提出这个问题的目的是找出直接将控制器注入所需的数据(更具体的方法)与将模型注入控制器(更通用的方法)相比是否有好处。或者确定它是否只是一个偏好问题。
用模型注入控制器:
模型可用于运行各种查询以检索各种数据位,但它是一个比数据本身更重的结构。模型本质上包含数据,或者至少它可以访问您可能需要的所有数据。示例:
class CategoryControllerWithModel
{
private $model;
public function __construct($model)
{
$this->model = $model;
}
// generates HTML for input form
public function genHtml()
{
/* retrieve data */
$categories = $this->model->getCategories();
//...
}
}
//instantiation within Factory Method:
class Factory
{
$model = new CategoryModel();
$controller = new CategoryControllerWithModel($model);
return $controller;
}
向控制器注入数据:
在这里,我们在 Factory 方法中做了更多的前期工作,但我们得到了一个更精简的 Controller,它只接收它需要的数据,并且与 Model 完全分离,甚至不知道它的存在。
class CategoryControllerWithData
{
private $categories;
public function __construct($categories)
{
$this->categories = $categories;
}
public function genHtml()
{
$categories = $this->categories;
}
}
//instantiation within Factory Method:
class Factory
{
$model = new CategoryModel();
//a bit more work to get the data Controller needs
//benefit: Controller not tied to the Model
$categories = $model->getCategories():
$controller = new CategoryControllerWithData($categories);
return $controller;
}
问题:
我认为 MVC 代表的正是模型、视图、控制器,因此注入模型可能被认为是“可以”做的事情。如果是这样,我是否通过尝试删除 Controller 对 Model 的依赖而走得太远了?
假设我坚持要将数据注入到我的控制器而不是模型中。这是一个纯粹的优先问题,您认为这样做有什么具体好处吗?
【问题讨论】:
标签: php oop model-view-controller dependency-injection inversion-of-control