A differenza di RequestFactory che ha scarse capacità di gestione degli errori e di test (poiché elabora la maggior parte delle cose sotto il cofano di GWT), RPC consente di utilizzare un approccio più orientato ai servizi. RequestFactory implementa un approccio in stile di inserimento delle dipendenze più moderno che può fornire un approccio utile se è necessario richiamare strutture di dati polimorfiche complesse. Quando si utilizza RPC, le strutture dei dati dovranno essere più piatte, poiché ciò consentirà alle utilità di marshalling di tradurre tra i modelli json / xml e java. L'utilizzo di RPC consente anche di implementare un'architettura più robusta, come citato dalla sezione gwt dev sul sito Web di Google.
"Distribuzione semplice client / server
Il primo e più semplice modo per pensare alle definizioni dei servizi è trattarle come l'intero back-end dell'applicazione. Da questo punto di vista, il codice lato client è il tuo "front-end" e tutto il codice di servizio che viene eseguito sul server è "back-end". Se si adotta questo approccio, le implementazioni del servizio tenderebbero ad essere API più generiche che non sono strettamente collegate a un'applicazione specifica. È probabile che le definizioni dei servizi accedano direttamente ai database tramite JDBC o Hibernate o persino ai file nel file system del server. Per molte applicazioni, questa visualizzazione è appropriata e può essere molto efficiente perché riduce il numero di livelli.
Distribuzione multilivello
In architetture più complesse e multilivello, le definizioni dei servizi GWT potrebbero essere semplicemente gateway leggeri che chiamano attraverso ambienti server back-end come i server J2EE. Da questa prospettiva, i tuoi servizi possono essere visti come la "metà server" dell'interfaccia utente della tua applicazione. Invece di essere generici, i servizi vengono creati per le esigenze specifiche della tua interfaccia utente. I tuoi servizi diventano il "front-end" delle classi "back-end" che vengono scritte unendo le chiamate a un livello di servizi back-end più generico, implementato, ad esempio, come un cluster di server J2EE. Questo tipo di architettura è appropriato se si richiede che i servizi di back-end vengano eseguiti su un computer fisicamente separato dal server HTTP. "
Si noti inoltre che l'impostazione di un singolo servizio RequestFactory richiede la creazione di circa 6 classi java, dove come RPC ne richiede solo 3. Più codice == più errori e complessità nel mio libro.
RequestFactory ha anche un po 'più di overhead durante l'elaborazione della richiesta, in quanto deve effettuare il marshalling della serializzazione tra i proxy di dati e gli effettivi modelli java. Questa interfaccia aggiunta aggiunge cicli di elaborazione extra che possono davvero sommarsi in un ambiente aziendale o di produzione.
Inoltre, non credo che i servizi di RequestFactory siano serializzazione come i servizi RPC.
Tutto sommato, dopo aver usato entrambi per un po 'di tempo, scelgo sempre RPC perché è più leggero, più facile da testare ed eseguire il debug e più veloce rispetto all'utilizzo di RequestFactory. Sebbene RequestFactory potrebbe essere più elegante ed estensibile della sua controparte RPC. La complessità aggiunta non lo rende uno strumento migliore necessario.
La mia opinione è che l'architettura migliore sia quella di utilizzare due app Web, un client e un server. Il server è una semplice webapp java generica e leggera che utilizza la libreria servlet.jar. Il cliente è GWT. Si effettua una richiesta RESTful tramite GWT-RPC nel lato server dell'applicazione web client. Il lato server del client è solo un passaggio al client http di apache che utilizza un tunnel persistente nel gestore delle richieste che hai in esecuzione come un singolo servlet nell'applicazione web del servlet del server. L'applicazione web servlet dovrebbe contenere il livello dell'applicazione database (ibernazione, cayenne, sql ecc.) Ciò consente di separare completamente i modelli di oggetti del database dal client effettivo fornendo un modo molto più estensibile e robusto per sviluppare e testare la propria applicazione. Certo, richiede un po 'di tempo di configurazione iniziale, ma alla fine ti consente di creare una fabbrica di richieste dinamica che si trova al di fuori di GWT. Ciò ti consente di sfruttare il meglio di entrambi i mondi. Per non parlare della possibilità di testare e apportare modifiche al lato server senza dover compilare o compilare il client gwt.