Localizzatore di servizi in stile Guice
-
07-07-2019 - |
Domanda
Qualcuno ha mai visto / tentato di scrivere un modello di localizzatore di servizio che utilizza un sistema di configurazione in stile Guice?
Attualmente ho un progetto GWT (che utilizza GWT-RPC) che utilizza un modello di comando in cui il mio servlet RPC che assomiglia a questo ...
public interface TransactionService extends RemoteService {
<T extends Response> T execute(Action<T> action);
}
Nella mia attuale implementazione del metodo execute lo faccio ...
if(action instanceof SomeActionImpl){
doSomeActionImpl((SomeActionImpl)action);
}else if(action instanceof SomeActionImpl2){
doSomeActionImpl2((SomeActionImpl2)action);
}
Quello che vorrei fare è trovare un modo per sbarazzarmi dell'enorme dichiarazione if. Avrei bisogno di un modo per registrare che la classe di ActionImpl1 dovrebbe essere delegata a un'altra implementazione di TransactioNService.
Qualche idea? Stavo pensando di aggiungere solo voci a una HashMap in cui la chiave è la classe Action e il valore è la classe ServiceImpl. Uno Ho un riferimento alla classe ServiceImpl che potrei usare Guice per ottenere un'istanza di TransactionService.
Soluzione
Dai un'occhiata alla classe net.customware.gwt.dispatch.server.DefaultActionHandlerRegistry in gwt-dispatch ( http://code.google.com/p/gwt-dispatch/ ); fa esattamente quello che stai suggerendo. Ecco la variabile membro che memorizza i gestori:
Mappa finale privata < Classe < ;? estende Action <? > > ;, ActionHandler <?,? > > gestori;
Se si desidera eseguire i gestori sul lato server, utilizzare i componenti lato server gwt-dispatch; se è roba lato client, allora considera la modellazione della tua classe di dispacciamento su DefaultActionHandlerRegistry.