Зависимость PHP Setter с & quot; зависимостями по умолчанию & quot;

В настоящее время я работаю над контейнером для инъекций зависимостей, и я столкнулся с множеством их типов (Pimple, Orno / di, Laravel’s …) и планирую сделать что-то похожее на Pimple. Но у меня все еще есть вопрос, если я делаю свой DI, используя сеттеры и геттеры, правильно ли вставлять «зависимости по умолчанию» в конструкторы зависимых классов? Позвольте мне привести пример:

Вот мой пример кода:

<?php

class Dependency
{
public function print($str)
{
echo $str;
}
}class Dependent
{
private $_dependency;

public function __construct()
{
$this->_dependency = new Dependency;
}public function setDependency(Dependency $dep)
{
$this->_dependency = $dep;
return $this;
}

public function depPrint($str)
{
$this->_dependency->print($str);
return $this;
}
}

Таким образом, пользовательский код может напрямую использовать класс, не зная его зависимостей:

$instance = new Dependent;
$instance->depPrint('Hello world');

Или, если пользовательскому коду нужен класс для использования другой зависимости, он может сделать это так:

$instance = new Dependent;
$instance->setDependency(new Dependency)
->depPrint('Hello world');

Я чувствую, что это удобно, так как при тестировании вы можете заменить зависимости на фиктивные классы, и пользовательский код не должен ничего знать о зависимостях классов. Самым большим недостатком, который я обнаружил, является то, что он по-прежнему создает связь с зависимостями по умолчанию, но это можно легко исправить, проверив, существует ли класс или нет, и если он не существует, то по умолчанию ничего не вводить. Итак, есть ли недостатки этой системы, я должен использовать ее или я должен использовать что-то еще?

Заранее спасибо.

0

Решение

Вы могли бы объединить две вещи:

public function __construct($dep = null)
{
if (is_null($dep)) {
$this->_dependency = new Dependency;
} else {
$this->_dependency = $dep;
}
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector