首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >大量依赖对象作为构造函数参数

大量依赖对象作为构造函数参数
EN

Stack Overflow用户
提问于 2014-07-31 18:23:58
回答 1查看 604关注 0票数 1

我刚学到了依赖注入。但是我遇到了这个问题:因为我们类的一些依赖对象可以是

代码语言:javascript
运行
复制
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());

如果它依赖于很多物体,

代码语言:javascript
运行
复制
class Boo
{
        public function __construct(FooInterface $foo, TooInterface $boo, PooInterface $poo, etc, etc ,etc, etc, etc) 
        {
        //
         }
}

看上去太多了,你不觉得吗?还是很正常?或者我还应该做些什么呢?

EN

回答 1

Stack Overflow用户

发布于 2014-07-31 18:35:41

如果您的类实际上对所有这些对象都有一个硬依赖项(即不是可选依赖项),那么这样做是有效的。如果有些依赖项是可选的(例如,您可以注入一个记录器,但如果它不存在,您就不执行任何日志记录),那么考虑从构造函数中删除它们,而使用setter注入。

Setter注入是将$foo属性按常规方式添加到类中的地方,但从构造函数的参数中忽略它。然后,您将向类提供一个setFoo(Foo $foo)方法,以便在需要时可以注入一个Foo实例。

当一个类有很长的参数列表时,您的类试图做的太多并且可能不遵循单一责任原则,这可能是一种“代码嗅觉”。如果您的类试图做的太多,请考虑将代码重构为许多相互消耗的较小的类。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25066292

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档