У меня есть текущая ситуация:
A имеет абстрактный класс, Controller
, который имеет зависимости, которые вводятся во время выполнения локатором службы, Locator
.Локатор службы реализован правильно - он не передается по всему приложению и используется только Controller
, который является корневым объектом приложения.
Проблема, с которой я сталкиваюсь, заключается в том, какструктурировать локатор (-ы) службы, когда я наследую от Controller
- я не обязательно хочу (и не хотел бы) расширять базовый локатор службы Locator
, но мне нужно дублировать зависимости родительского класса.
Вот пример кода, объясняющего, что происходит:
// Controller.php
namespace abstract;
abstract class Controller {
public function __construct( $locator ) {
$this->template_handler = $locator->getTemplateHandler();
$this->input_sanitizer = $locator->getInputSanitizer();
}
}
-
// Controller.php
class Controller extends abstract\Controller {
public function __construct( $locator ) {
$this->data_factory = $locator->getDataFactory();
parent::__construct( $locator );
}
}
-
// Locator.php
namespace abstract;
class Locator {
public function getTemplateHandler() {
return 1234;
}
public function getInputSanitizer() {
return 1234;
}
}
Итак, я думаю,возникает вопрос - как мне определить мой Locator
класс?Расширяю ли я abstract\Locator
(создавая параллельное дерево наследования), реализую ли я те же методы без расширения abstract\Locator
(этот дублирующий код), или я делаю что-то другое, о чем я не думал?