我有两个类共享类之间的依赖,同时使依赖注入
ClassA , ClassB
类通常取决于两个基本的服务和存储库
ServiceA , ServiceB
类(ClassA , ClassB
)使用DI原则通过构造函数注入依赖。
由于三个共享一些常见的服务如上面提到我希望将所有的一类Base
的常用方法和服务,如本
基类
class Base {
protected $A;
protected $B;
public function __construct(ServiceA $A, ServiceB $B){
$this->A = $A;
$this->B = $B;
}
}
儿童服务
class Child extends Base {
protected $C;
public function __construct(ChildDependency $C){
$this->C = $C;
}
public function doStuff()
{
//access the $A (**Its null**)
var_dump($this->A);
}
}
问题
如何在不违反IoC原则的情况下拥有共同的父亲依赖关系?
可能的情况1
我知道我必须叫parent::__construct()
初始化基本构造。但是接下来我必须在下面的所有子类中定义Parent的依赖关系。
(但是对于大量的孩子,我必须重复这个过程,它违背了共同DI点的目的)。
class Child extends Base {
protected $C;
public function __construct(ChildDependency $C, ParentDepen $A, ParentDepn $B){
parent::_contruct($A,$B);
$this->C = $C;
}
}
可能病例2
有使用getter和setter。但我认为他们违反了IoC原则。
请问您是否与我们分享您的实际使用案例?我相信取决于'Base'' Child'和依赖关系实际上可能有不同的方法来解决这个问题。 – lukasgeiter 2015-02-22 22:14:51
这听起来像你打破[SRP](http://en.wikipedia.org/wiki/Single_responsibility_principle)(也许其他一些[SOLID(http://en.wikipedia.org/wiki/SOLID_%28object面向设计%29)原则),以及[拉萨尼亚代码](http://en.wikipedia.org/wiki/Spaghetti_code#Lasagna_code)。 – 2015-02-22 22:45:54
'ClassA,ClassB'他们在哪里? – sectus 2015-02-24 10:06:41