Избежание параллельного наследования с помощью сервисных локаторов - PullRequest
1 голос
/ 24 февраля 2012

У меня есть текущая ситуация:

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 (этот дублирующий код), или я делаю что-то другое, о чем я не думал?

1 Ответ

0 голосов
/ 28 февраля 2012

Вы должны использовать один локатор во всех контроллерах. Если, конечно, услуги не очень специфичны. В противном случае, для чего нужен сервисный локатор, если вам нужно было сначала найти нужный локатор?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...