Как правильно использовать внедрение зависимостей?Потому что использование методов внедренного класса создает новую зависимость - PullRequest
0 голосов
/ 11 июня 2018

Я - самообучающийся, пытаюсь стать хорошим разработчиком PHP и хочу полностью понять Внедрение Зависимостей.

Я понимаю общий принцип, в теории внедрение зависимостей делает мои классы не имеющими тесно связанных зависимостейв другие классы.

Но я не понимаю, как это может быть полностью реализовано на практике.

Пример с использованием контейнера PHP League и Пример контроллера:

/***************************************************************************************
 * DI Container setup
 ***************************************************************************************/
$container = new Container();

/***************************************************************************************
 * Register Service Providers
 ***************************************************************************************/
$container->addServiceProvider(new \App\Providers\ConfigProvider);

/***************************************************************************************
 * Register Container Class Dependencies
 ***************************************************************************************/
$container->share('App\Http\Controller')
    ->withArguments(['config']);

Теперь в моем контроллере я получаю введенную зависимость следующим образом:

class Controller
{

    public $config;

    function __construct($config)
    {
        $this->config = $config;
    }

    function index()
    {
        $newConfigItem = 'domain.com';
        $configDomain = $this->config->setConfig($newConfigItem);
    }
}

Контроллер - это просто пример, это может быть любой класс, любой тип класса, например, Serviceprovider, Middleware и т. Д.

Это более общий вопрос относительно правильной обработки внедрения зависимостей.

Не использование метода setConfig () внедренного класса Config создает новыйтесно связанная зависимость?

Даже если бы я использовал Контейнер для создания нового Объекта, используя контейнер напрямуюв любом классе только что создали зависимость от метода контейнера, используемого для регистрации / расширения объектов в контейнере.

Или мне нужен дополнительный слой классов PHP, которые каким-то образом обертывают мои зависимости, чтобы использовать новые имена методов, но дажезатем этот дополнительный слой классов php имеет зависимости, которые необходимо скорректировать, если мне нужно отключить используемые библиотеки / пакеты / компоненты.

Где я ошибаюсь в своем мышлении?

...