【发布时间】:2014-06-09 20:05:47
【问题描述】:
这是我第一次使用 StackOverflow,我希望我的问题不是那么无聊!我从来没有真正尝试过解决这个问题,我总是通过 setters 方法而不是构造函数来使用 DI,但现在是时候寻找更好的模式了! :) 我尝试进行搜索,但没有得到任何令人满意的答案:(
基本上我有一个容器类,它应该将所有依赖项链接在一起,并且这些类中的每一个(A、B、...)也应该能够从“它们的内部”访问容器中的其他类.
<?php
class MyContainer
{
function __construct(A $a, B $b){
$this->a = $a;
$this->b = $b;
}
function getA(){ return $this->a; }
function getB(){ return $this->b; }
}
class A
{
function __construct(MyContainer $myc){ $this->myc = $myc; }
function useA(){ echo "A"; $this->myc->getB()->doSmt(); }
function doSmt(){ echo "A smt"; }
}
class B
{
function __construct(MyContainer $myc){ $this->myc = $myc; }
function useB(){ echo "B"; $this->myc->getA()->doSmt(); }
function doSmt(){ echo "B smt"; }
}
?>
现在无法实例化,因为 MYC 需要 A 和 B,而 A 和 B 需要 MYC。
我该如何解决这个问题?我的教授告诉我,当您遇到循环依赖时,很可能是设计问题。但我不知道如何正确地做到这一点:A 和 B 的存在实际上取决于 MyCollection,反之亦然。
附:我想尝试使用 DI 来解决这个问题,如果它可以以干净和明智的方式完成的话。我不是工厂的粉丝! :)
提前感谢您的帮助!
【问题讨论】:
标签: php oop design-patterns circular-dependency circular-reference