我刚学到了依赖注入。但是我遇到了这个问题:因为我们类的一些依赖对象可以是
interface FooInterface {
function fooMethod();
}
class Foo implements FooInterface {
function fooMethod(){
return 'Foo';
}
}
class Boo
{
public $foo;
public function __construct(FooInterface $foo) // This one is ok because it depends on one object only,
{
$this->foo = $foo;
}
}
class BooFactory
{
public static function create()
{
return new Boo(new Foo);
}
}
$a = new BooFactory;
$b = $a->create();
var_dump($b->foo->fooMethod());如果它依赖于很多物体,
class Boo
{
public function __construct(FooInterface $foo, TooInterface $boo, PooInterface $poo, etc, etc ,etc, etc, etc)
{
//
}
}看上去太多了,你不觉得吗?还是很正常?或者我还应该做些什么呢?
发布于 2014-07-31 18:35:41
如果您的类实际上对所有这些对象都有一个硬依赖项(即不是可选依赖项),那么这样做是有效的。如果有些依赖项是可选的(例如,您可以注入一个记录器,但如果它不存在,您就不执行任何日志记录),那么考虑从构造函数中删除它们,而使用setter注入。
Setter注入是将$foo属性按常规方式添加到类中的地方,但从构造函数的参数中忽略它。然后,您将向类提供一个setFoo(Foo $foo)方法,以便在需要时可以注入一个Foo实例。
当一个类有很长的参数列表时,您的类试图做的太多并且可能不遵循单一责任原则,这可能是一种“代码嗅觉”。如果您的类试图做的太多,请考虑将代码重构为许多相互消耗的较小的类。
https://stackoverflow.com/questions/25066292
复制相似问题