【发布时间】:2011-12-09 01:11:59
【问题描述】:
我一直在阅读依赖注入,我想我非常了解这些概念,包括构造函数注入和设置器注入。
但是,我不确定在以下情况下我会做什么:
假设我有一个包含许多方法的类,但只有一个这些方法需要某个其他对象。如何将此对象提供给该方法?我不应该像这样直接将对象作为参数传递给方法吗:
class aClass
{
function aMethod(anotherClass $anotherClass)
{
anotherClass->hello();
}
function otherMethods()
{
}
.....
}
另一种选择是将它提供给整个班级,这似乎没有必要。像这样:
class aClass
{
protected $_anotherClass;
function aMethod()
{
anotherClass->hello();
}
function otherMethods()
{
}
.....
function setAnotherClass(anotherClass $anotherClass)
{
$this->_anotherClass;
}
}
什么时候应该将对象传递给方法,什么时候应该通过构造函数/设置器使用依赖注入? 对于何时使用这两个选项之一,是否有经验法则或最佳实践?
提前感谢您的帮助。
【问题讨论】:
-
如果你的例子更具体,回答你的问题会更容易。
anotherClass是什么,aMethod 用它做什么? -
好的,一个场景:我的电子商务网站中有一个 Basket 类。此 Basket 类中的方法之一称为 listProducts()。这是唯一需要访问产品数据库表的方法。这有它自己的数据映射器类,称为 productsMapper。第二种情况:我有一个带有 save() 方法的数据映射器类。此方法需要行的模型。向整个班级提供这个模型绝对没有意义。
-
好的,我觉得这很直观,所以这里有具体的答案。第一种情况:注入——篮子可能会发出一些数据库请求。第二种场景:参数,你只需要存储一次数据,可能想存储其他模型使用相同的对象的功能。
-
@middus 太好了,这真的很有帮助,也是我的想法。是的,这很直观,但我确实喜欢遵循规则,可能是由于轻度强迫症! :)
标签: php oop dependency-injection loose-coupling