1
考慮下面的例子:Php,可以使用DI特性嗎?
class MyClass
{
public function doSomething()
{
$this->injected->getIt();
}
}
到目前爲止如此簡單(除了injected
沒有注入)。所以,在完整版:
class MyClass
{
/**
* @var Injected
*/
private $injected;
public function __constructor(Injected $injected)
{
$this->injected = $injected;
}
public function doSomething()
{
$this->injected->getIt();
}
}
但我覺得它是enoromous。爲什麼要用大量的DI代碼污染我的班級?讓我們分成兩個實體:
trait MyClassTrait
{
/**
* @var Injected
*/
private $injected;
public function __constructor(Injected $injected)
{
$this->injected = $injected;
}
}
class MyClass
{
use MyClassTrait;
public function doSomething()
{
$this->injected->getIt();
}
}
它更好,雖然我從來沒有見過任何人使用它像這樣。這是一個好方法嗎?
在一週之內,你將打開'MyClass',然後你會問自己:「到底是什麼'injected'?」。有這樣的理由嗎?你只需隱藏你的依賴關係。你會有100個班級和100個特質,出於這個原因?這不好 – Federkun
imo工廠+反射是更好的方式 – Kazz
@Kazz究竟如何? –