我写了一个使用DI的开源PHP库。可以有依赖注入回退吗?
图书馆有记入的人想使用它的单点,在客户类,它有一个构造看起来像这样(简化):
class Client {
protected $depOne;
protected $depTwo;
public function __construct(DependencyOne $depOne, DependencyTwo, $depTwo)
{
$this->depOne = $depOne;
$this->depTwo = $depTwo;
}
}
DependencyOne和DependencyTwo也有自己的依赖关系。这意味着,任何人想要使用没有使用DI需要做这样的事情我的图书馆:
$dependencyThree = new DependencyThree();
$dependencyFour = new DependencyFour();
$dependencyFive = new DependencyFive();
$dependencyOne = new DependencyOne($dependencyThree, $dependencyFour);
$dependencyTwo = new DependencyTwo($dependencyFive);
$client = new Client($dependencyOne, $dependencyTwo);
$someStuff = $client->doTheThing();
难道是不好使的依赖注入只是该类可选的?例如
class Client {
protected $depOne;
protected $depTwo;
public function __construct(DependencyOne $depOne = null, DependencyTwo, $depTwo = null)
{
if (!isset($depOne)) {
$depThree = new DependencyThree();
$depFour = new DependencyFour();
$depOne = new DependencyOne($depThree, $depFour);
}
if (!isset($depTwo)) {
$depFive = new DependencyFive();
$depTwo = new DependencyTwo($depFive);
}
$this->depOne = $depOne;
$this->depTwo = $depTwo;
}
}
这意味着有人不使用DI可能只是这样做:
$client = new Client();
$someStuff = $client->doTheThing();
那些想要使用DI,或用于单元测试目的,依赖仍然可以通过。
这是一个坏主意,如果是这样,为什么?
这并不是一个坏主意,此外,在制作模块/服务/人们使用的任何东西时,建议您在构造函数中构建硬依赖关系。以防万一有人不使用DI – Unex 2015-03-31 08:36:49