Im Gegensatz zu RequestFactory mit schlechten Funktionen zur Fehlerbehandlung und zum Testen (da die meisten Dinge unter der Haube von GWT verarbeitet werden) können Sie mit RPC einen serviceorientierteren Ansatz verwenden. RequestFactory implementiert einen moderneren Ansatz im Stil der Abhängigkeitsinjektion, der einen nützlichen Ansatz bietet, wenn Sie komplexe polymorphe Datenstrukturen aufrufen müssen. Wenn Sie RPC verwenden, müssen Ihre Datenstrukturen flacher sein, da dies Ihren Marshalling-Dienstprogrammen ermöglicht, zwischen Ihren json / xml- und Java-Modellen zu übersetzen. Mit RPC können Sie auch eine robustere Architektur implementieren, wie im Abschnitt gwt dev auf der Google-Website angegeben.
"Einfache Client / Server-Bereitstellung
Die erste und einfachste Möglichkeit, sich Service-Definitionen vorzustellen, besteht darin, sie als das gesamte Back-End Ihrer Anwendung zu behandeln. Aus dieser Perspektive ist clientseitiger Code Ihr "Front-End" und der gesamte auf dem Server ausgeführte Service-Code ist "Back-End". Wenn Sie diesen Ansatz wählen, handelt es sich bei Ihren Service-Implementierungen in der Regel um allgemeinere APIs, die nicht eng an eine bestimmte Anwendung gekoppelt sind. Ihre Dienstdefinitionen greifen wahrscheinlich direkt über JDBC oder Hibernate oder sogar auf Dateien im Dateisystem des Servers auf Datenbanken zu. Für viele Anwendungen ist diese Ansicht geeignet und kann sehr effizient sein, da sie die Anzahl der Ebenen verringert.
Multi-Tier-Bereitstellung
In komplexeren, mehrstufigen Architekturen können Ihre GWT-Dienstdefinitionen einfach einfache Gateways sein, die Back-End-Serverumgebungen wie J2EE-Server aufrufen. Aus dieser Perspektive können Ihre Dienste als "Serverhälfte" der Benutzeroberfläche Ihrer Anwendung angesehen werden. Anstatt universell zu sein, werden Dienste für die spezifischen Anforderungen Ihrer Benutzeroberfläche erstellt. Ihre Dienste werden zum "Front-End" für die "Back-End" -Klassen, die durch Zusammenfügen von Aufrufen an eine allgemeinere Back-End-Schicht von Diensten geschrieben werden, die beispielsweise als Cluster von J2EE-Servern implementiert sind. Diese Art von Architektur ist geeignet, wenn Ihre Back-End-Dienste auf einem physisch von Ihrem HTTP-Server getrennten Computer ausgeführt werden müssen. "
Beachten Sie auch, dass zum Einrichten eines einzelnen RequestFactory-Dienstes etwa 6 Java-Klassen erstellt werden müssen, für die als RPC nur 3 erforderlich sind. Mehr Code == mehr Fehler und Komplexität in meinem Buch.
RequestFactory hat auch etwas mehr Overhead während der Anforderungsverarbeitung, da die Serialisierung zwischen den Datenproxys und den tatsächlichen Java-Modellen gemarshallt werden muss. Diese zusätzliche Schnittstelle fügt zusätzliche Verarbeitungszyklen hinzu, die sich in einer Unternehmens- oder Produktionsumgebung wirklich summieren können.
Ich glaube auch nicht, dass RequestFactory-Dienste Serialisierung wie RPC-Dienste sind.
Alles in allem, nachdem ich beide seit einiger Zeit verwendet habe, verwende ich RPC immer als leichter, einfacher zu testen und zu debuggen und schneller als mit einer RequestFactory. Obwohl RequestFactory möglicherweise eleganter und erweiterbarer ist als sein RPC-Gegenstück. Die zusätzliche Komplexität macht es nicht zu einem besseren Werkzeug.
Meiner Meinung nach besteht die beste Architektur darin, zwei Web-Apps, einen Client und einen Server, zu verwenden. Der Server ist eine einfache, leichtgewichtige generische Java-Webanwendung, die die Bibliothek servlet.jar verwendet. Der Kunde ist GWT. Sie stellen eine RESTful-Anforderung über GWT-RPC auf der Serverseite der Client-Webanwendung. Die Serverseite des Clients ist jedoch nur ein Durchgang zum Apache-HTTP-Client, der einen dauerhaften Tunnel in den Anforderungshandler verwendet, den Sie als einzelnes Servlet in Ihrer Server-Servlet-Webanwendung ausführen. Die Servlet-Webanwendung sollte Ihre Datenbankanwendungsschicht enthalten (Ruhezustand, Cayennepfeffer, SQL usw.). Auf diese Weise können Sie die Datenbankobjektmodelle vollständig vom eigentlichen Client trennen und so Ihre Anwendung wesentlich erweiterbarer und robuster entwickeln und testen. Zugegeben, es erfordert ein bisschen anfängliche Einrichtungszeit. Am Ende können Sie jedoch eine dynamische Anforderungsfactory außerhalb von GWT erstellen. So können Sie das Beste aus beiden Welten nutzen. Ganz zu schweigen davon, dass Sie Ihre Serverseite testen und Änderungen daran vornehmen können, ohne dass der GWT-Client kompiliert oder erstellt werden muss.