Сервисный локатор в стиле Guice - PullRequest
2 голосов
/ 16 сентября 2009

Кто-нибудь когда-либо видел / пытался написать шаблон локатора службы, который использует систему конфигурации в стиле Guice?

В настоящее время у меня есть проект GWT (который использует GWT-RPC), в котором используется шаблон команды, в котором мой RPC-сервлет выглядит следующим образом ...

public interface TransactionService extends RemoteService {

    <T extends Response> T execute(Action<T> action);
}

В моей текущей реализации метода execute я делаю это ...

if(action instanceof SomeActionImpl){
  doSomeActionImpl((SomeActionImpl)action);
}else if(action instanceof SomeActionImpl2){
  doSomeActionImpl2((SomeActionImpl2)action);
}

Я хотел бы найти способ избавиться от гигантского оператора if. Мне нужен какой-то способ регистрации того, что класс ActionImpl1 должен быть делегирован другой реализации TransactioNService.

Есть идеи? Я думал просто добавить записи в HashMap, где ключ - это класс Action, а значение - это класс ServiceImpl. У меня есть ссылка на класс ServiceImpl, который я мог бы использовать Guice для получения экземпляра TransactionService.

1 Ответ

2 голосов
/ 16 сентября 2009

Взгляните на класс net.customware.gwt.dispatch.server.DefaultActionHandlerRegistry в gwt-dispatch (http://code.google.com/p/gwt-dispatch/); делает именно то, что вы предлагаете. Вот переменная-член, которая хранит обработчики:

закрытый финал Карта <Класс <? расширяет обработчики Action <? >>, ActionHandler <?,? >>;

Если вы хотите выполнить обработчики на стороне сервера, используйте компоненты gwt-dispatch на стороне сервера; если это на стороне клиента, подумайте о моделировании вашего класса диспетчеризации в DefaultActionHandlerRegistry.

...