У меня текущая ситуация:избежать параллельного наследования с сервисом локаторами
А имеет абстрактный класс, 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
(этот дублирующий код), или я делаю что-то другое, о чем я не думал?
'namespace abstract;' недопустимый синтаксис – Vitamin
Это очень верно. Я также забыл о своих требованиях, а 'Controller' не имеет других методов, кроме конструктора. Спасибо за проницательный совет. –