Последний пример RequestObject который содержит входные параметры, его можно передавать по цепочке, а можно получить через DI. Первое правильно, второе убивать. Если не понятно - то извините и смотрите выше.
Я правильно понимаю, например, есть класс(из реальной задачи беру) ImportOrderStrategy, ему нужен ImportContextInterface, ImportLoggerInterface, EventDispatcherInterface.
1) Первый подход это(by HraKK version):
PHP:
class ImportHelper
{
private $context;
private $logger;
private $ed;
public function construct(ImportContextInterface $context, ImportLoggerInterface $logger, EventDispatcherInterface $ed)
{
$this->context = $context;
$this->logger= $logger;
$this->ed = $ed;
}
public function getContext(){return $this>context;}
public function getLogger(){return $this>logger;}
public function getEd(){return $this>ed;}
}
class ImportOrderStrategy
{
private $helper;
public function construct(ImportHelper $helper)
{
$this->helper = helper;
}
public function someMethod(Order $order)
{
$this->helper->getContext()->addReplaced($order);
$this->helper->getLogger()->log('one replaced');
$this->helper->gerEd()->dispatch(OrderEvent::Replaced);
}
}
2) Второй подход это(by HraKK version):
PHP:
class ImportOrderStrategy
{
private $context;
private $logger;
private $ed;
public function construct(ImportContextInterface $context, ImportLoggerInterface $logger, EventDispatcherInterface $ed)
{
$this->context = $context;
$this->logger= $logger;
$this->ed = $ed;
}
public function someMethod(Order $order)
{
$this->context->addReplaced($order);
$this->logger->log('one replaced');
$this->ed->dispatch(OrderEvent::Replaced);
}
}
Блин, пример из реального всё равно превратил в виртуальный, уменьшая количество кода.
Но я не вижу между этими подходами революционно огромной разницы.
ImportOrderStrategy даже в первом случае всё равно, пускай и косвенно, зависит от интерфейсов ImportContextInterface, ImportLoggerInterface, EventDispatcherInterface.
Сама зависимость никуда не пропадает.
Единственное отличие, при переходе со второго варианта на первый, ответственность за создание конкретных реализаций интерфейсов перекладывается с создателей ImportOrderStrategy на создателей ImportHelper.
Хотя... Плюс есть, ImportHelper можно применять повторно.