依赖注射重构

时间:2018-01-31 23:17:29

标签: dependency-injection

我认为“当构造函数,方法或DI容器注入对象时,重构类如何”

构造函数注入的简单示例。

<?php
class Person {
    private $db;
    function constructor($db) {
        $this->db = $db;  
    }
}

这真是太好了,但是,让我们想象一下Person类在其他类如Report,Photos,Searcher等中的使用。因此,即使它们不需要db连接,每个类也需要通过构造或方法注入$ db。 / p>

下一课人员需要缓存对象。

<?php
class Person {
    private $db;
    function constructor($db, $cache) {
        $this->db = $db;  
        $this->cache = $cache;  
    }
}

现在我们需要更新报告,照片,搜索者。如果项目很大,那就不容易了。

所以认为可能更好的解决方案是注入整个Dependence Injection Container(服务地点)

<?php
class Person {
    private $db;
    function constructor($di) {
        $this->db = $di->get('db');  
        $this->cache = $di->get('cache');  
    }
}

似乎用重构解决了我的问题的一部分。但这个解决方案几乎就像全局变量。这是反模式的例子。

请通过此了解良好做法。

0 个答案:

没有答案