Сервисный локатор с использованием статических методов - PullRequest
1 голос
/ 10 января 2012

В коде проекта, над которым я работаю, я столкнулся со странным подходом.

Уровень пользовательского интерфейса получает зависимости, используя своего рода Service Locator, который является классом со статическими методами:

public class ServiceManager {

    public static MailService getMailService() {
        ...
    }

    public static UserInfoService getUserInfoService() {
        ...
    }
    ...
}

Зависимости, которые «распределяются» этим классом, внедряются в него с помощью Spring Framework.

В чем может быть причина такого подхода? Я вижу только недостатки. Поскольку методы локатора являются статическими, интерфейса нет. Отсутствие интерфейса усложняет рассуждения о цели класса. Клиенты этого класса тесно связаны с ним (помните, там нет интерфейса), что делает невозможным их повторное использование в других местах.

Не лучше ли позволить Spring вставлять зависимости непосредственно в классы пользовательского интерфейса?

1 Ответ

2 голосов
/ 10 января 2012

В большинстве каркасов пользовательского интерфейса часто очень сложно (если не невозможно) использовать конструкторское внедрение в классах пользовательского интерфейса.В этом случае обычно возвращается к шаблону Service Locator, но только -I повторяется only - в классах интерфейса пользователя.

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