Лучшая стратегия использования шаблона трубопровода для тестирования и изоляции метода в переполнении стека

Мой конвейерный шаблон для загрузки фото:

    // Define the pipeline stages
$pipeline = (new Pipeline\Pipeline(new Pipeline\InterruptiblePayloadProcessor))
->pipe(new \component\Product\Foto\GenerateName)
->pipe(new \component\Product\Foto\Upload)
->pipe(new \component\Product\Foto\Resize)
->pipe(new \component\Product\Foto\Save)
->pipe(new \component\Product\Foto\UpdateDefault);

// The payload is an object that's passed between stages
$payload = new Pipeline\Payload($_POST, ['files' => $_FILES]);
// Run the pipeline
$payload = $pipeline->process($payload);

Я хочу использовать некоторые классы в другом месте кода (или протестировать его):

$class = new \component\Product\Foto\GenerateName();
$res = $class->action('ABC');

Проблема в том, что эти классы используют пример экземпляра config:

public function fotoFileExist($filename, $ext)
{
$foto_subdirs = C::inst()->get('product_foto.subdirs');
// ...
}

Какой лучший элегантный способ с этим справиться:

А) Внедрение зависимостей.
Добавить конструктор в класс для ConfigInterface

public function __construct(\core\ConfigInterface $c)
{
$this->conf = $c;
}

..->pipe(new \component\Product\Foto\GenerateName(C::inst()))
..->pipe(new \component\Product\Foto\Upload(C::inst()))
...

Является ли этот элемент таким большим количеством повторений C :: inst ()?

B)
Добавьте Config obj в конвейер:

$payload = new Pipeline\Payload($_POST, ['files' => $_FILES], ['config' => C::inst()]);

C)
Используйте только один массив данных из примера конфигурации:

$config = C::inst()->get('product_foto);
..->pipe(new \component\Product\Foto\GenerateName($config))
..->pipe(new \component\Product\Foto\Upload($config))
...

0

Решение

Задача ещё не решена.

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

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

По вопросам рекламы [email protected]