我在这里考虑几种不同的方法,非常感谢一些输入!我正在考虑以下两种选择。那里有两件事我有疑问。
是将依赖项注入主“容器”类的构造函数,还是在容器类中创建新实例?
在第二个示例中,类的依赖项通过构造函数注入,然后通过类的属性在其中维护。然后在调用方法(route()、render())时,从内部调用依赖项。我从这种方法开始,但现在我更喜欢第一个示例的内容。我认为第一个示例更可取,但是在第二个示例中使用 DI 方法有什么好处吗?
确实没有必要在类中存储任何东西作为属性。我可能可以毫不费力地重新安排所有内容以使用该技术,而且我认为我更喜欢它。通过这种方式,我还可以将所有工作移出构造函数,稍后通过方法简单地访问所有内容。我在正确的轨道上吗?
class App
{
private $config;
private $router;
private $renderer;
public function __construct(IConfig $config, IRouter $router, IRenderer $renderer)
{
$this->config = $config;
$this->router = $router;
$this->renderer = $renderer;
$this->run();
}
public function run()
{
$data = $this->router->route(new Request, $config->routes);
$this->renderer->render($data);
}
}
class App
{
private $config;
private $router;
private $renderer;
public function __construct()
{
$this->config = new Config;
$this->run();
}
public function run()
{
$this->router = new Router(new Request, $config->routes);
$this->router->route();
$this->renderer = new Renderer($this->router->getData());
$this->renderer->render();
}
}