PHP依赖注入和松散耦合

在这里思考一些不同的方法,非常感谢一些输入!我正在考虑以下两个选择.那里有两件事我有疑问.

>是否首选将依赖项注入主“容器”类的构造函数中,或者在容器类中创建新实例?
>在第二个示例中,类的依赖项通过构造函数注入,然后通过类的属性进行维护.然后,当调用方法(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();
    }

}
最好将依赖项注入构造函数中.

在构造函数中创建实例会在两个类之间创建紧密耦合.使用具有清晰签名的构造函数

public function __construct(IConfig $config,IRenderer $renderer)

我可以立即告诉这个组件需要做什么工作.

给定一个构造函数

public function __construct();

不知道组件需要运行什么.它创建了与您的每个路由器,您的请求和渲染器的特定实现的强大耦合,在您深入了解您的类的内容之前,这些都不会显而易见.

总之,第一种方法有详细记录,可扩展和可测试.第二种方法是不透明,高度耦合,不易测试.

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...