Вопрос

Кто-нибудь когда-либо видел / пытался написать шаблон локатора сервиса, который использует систему конфигурации стиля 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.

Это было полезно?

Решение

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

приватная финальная карта < Class < ;? extends Action <? > > ;, ActionHandler <?,? > > Обработчики;

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top