Я пытаюсь выяснить лучшие практики для внедрения зависимостей в PHP.
Вопрос: Нужно ли вводить все зависимости подкласса в родительский класс?Я использую термины «родитель» и «ребенок» в терминах композиционных отношений.
Я сомневаюсь, потому что я нахожу в родительском классе все виды зависимостей, чтобы он мог просто передать их зависимому дочернему элементуклассы.
Редактировать:
Ниже приведен более конкретный пример того, о чем я говорю.MyClassA
не требуется объект подключения к базе данных или регистратор.Однако DoSomething
эти объекты действительно нужны.Каков наилучший способ получить подключение к базе данных и регистратор для экземпляра DoSomething
?Я не хочу использовать одиночные объекты или глобальные объекты для модульного тестирования.Кроме того, этот пример используется только для классов.Что если есть 3 или 4, а 3-му или 4-му нужен какой-то экземпляр объекта, а первым 2 или 3 - нет?MyClassA
просто передает объект следующему и т. Д.?
class MyClassA {
protected $_doSomethingObject;
public function doSomething()
{
return $this->_doSomethingObject()->doSomethingElse();
}
public function setDoSomethingObject($doSomethingObject)
{
$this->_doSomethingObject = $doSomethingObject;
}
}
class DoSomething {
protected $_logger;
protected $_db;
public function doSomethingElse()
{
$this->_logger->info('Doing Something');
$result = $this->_db->getSomeDataById();
return $results;
}
public function setLogger($logger)
{
$this->_logger = $logger;
}
public function setDBConection($db)
{
$this->_db = $db;
}
}
Является ли наилучший способ примера, который я показываю ниже?Если так, то лучший способ - это работать задом наперед, так сказать ...?
$logger = new Logger();
$db = new DBConnection();
$doSomething = new DoSomething();
$doSomething->setLogger($logger);
$doSomething->setDBConnection($db);
$a = new MyClassA();
$a->setDoSomething($doSomething);