我的代码类似于
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
的构造函数中注入可能的E
和A
类吗?这里的问题是项目的层次结构遵循这种树状结构,从而使上层节点A
保持其子节点的所有依赖关系。或者它在某种程度上是stupid是否足够理智?
答案 0 :(得分:1)
这取决于D和E实际上是什么。如果它们只是简单的数据对象,你会没事的。如果它们例如是抽象数据库访问,那么最好注入它们。
根据经验:如果你可以编写一个单元测试(例如使用phpUnit),它可以在每个系统上工作(这不仅仅意味着你的本地开发环境),那么耦合并不是那么严重,你就可以了你目前的做法。
另一方面,如果由于某些依赖项需要的某些缺少资源(例如数据库连接)而导致这样的单元测试失败,则应该注入此服务。然后,您可以为测试创建一个模拟对象,然后再次运行。