紧耦合& DI门槛

时间:2016-04-26 19:47:49

标签: php oop design-patterns dependency-injection

我的代码类似于

class A
{
    public $b, $c;

    //Inject D and E here? (B $b, C $c, D $d, E $e, ...)
    public function __construct(B $b, C $c)
    {
        $this->b = $b;
        $this->c = $c;
    }

    public function main()
    {
        if (rand(0,1)) {
            new D();
        } else {
            new E();
        }
    }
}

我应该在D的构造函数中注入可能的EA类吗?这里的问题是项目的层次结构遵循这种树状结构,从而使上层节点A保持其子节点的所有依赖关系。或者它在某种程度上是stupid是否足够理智?

1 个答案:

答案 0 :(得分:1)

这取决于D和E实际上是什么。如果它们只是简单的数据对象,你会没事的。如果它们例如是抽象数据库访问,那么最好注入它们。

根据经验:如果你可以编写一个单元测试(例如使用phpUnit),它可以在每个系统上工作(这不仅仅意味着你的本地开发环境),那么耦合并不是那么严重,你就可以了你目前的做法。

另一方面,如果由于某些依赖项需要的某些缺少资源(例如数据库连接)而导致这样的单元测试失败,则应该注入此服务。然后,您可以为测试创建一个模拟对象,然后再次运行。