エラー処理およびテスト機能が不十分なRequestFactoryとは異なり(GWTの内部でほとんどのものを処理するため)、RPCではよりサービス指向のアプローチを使用できます。RequestFactoryは、複雑なポリモーフィックデータ構造を呼び出す必要がある場合に役立つアプローチを提供できる、より最新の依存性注入スタイルのアプローチを実装しています。RPCを使用する場合、マーシャリングユーティリティがjson / xmlモデルとjavaモデルの間で変換できるようになるため、データ構造をよりフラットにする必要があります。RPCを使用すると、GoogleのWebサイトのgwt devセクションから引用されているように、より堅牢なアーキテクチャを実装することもできます。
「シンプルなクライアント/サーバー展開
サービス定義を考える最初の最も簡単な方法は、それらをアプリケーションのバックエンド全体として扱うことです。この観点から、クライアント側のコードは「フロントエンド」であり、サーバーで実行されるすべてのサービスコードは「バックエンド」です。このアプローチを採用する場合、サービスの実装は、1つの特定のアプリケーションに緊密に結合されていないより汎用的なAPIになる傾向があります。サービス定義は、JDBCまたはHibernateを介して、あるいはサーバーのファイルシステム内のファイルを介してデータベースに直接アクセスする可能性があります。多くのアプリケーションでは、このビューが適切であり、層の数が減るため、非常に効率的です。
多層展開
より複雑な多層アーキテクチャでは、GWTサービス定義は、J2EEサーバーなどのバックエンドサーバー環境を呼び出す軽量ゲートウェイである可能性があります。この観点から、サービスはアプリケーションのユーザーインターフェイスの「サーバーの半分」と見なすことができます。サービスは、汎用ではなく、ユーザーインターフェイスの特定のニーズに合わせて作成されます。サービスは、たとえばJ2EEサーバーのクラスターとして実装された、より汎用的なサービスのバックエンドレイヤーへの呼び出しをつなぎ合わせることによって作成される「バックエンド」クラスの「フロントエンド」になります。この種のアーキテクチャは、バックエンドサービスをHTTPサーバーとは物理的に別のコンピューターで実行する必要がある場合に適しています。」
また、単一のRequestFactoryサービスを設定するには、約6個程度のJavaクラスを作成する必要がありますが、RPCでは3個しか必要ありません。コードが増える==私の本ではエラーと複雑さが増します。
RequestFactoryは、データプロキシと実際のJavaモデルの間でシリアル化をマーシャリングする必要があるため、要求処理中のオーバーヘッドも少し多くなります。この追加されたインターフェースは、企業または実稼働環境で実際に追加される可能性のある追加の処理サイクルを追加します。
また、RequestFactoryサービスがRPCサービスのようなシリアル化であるとは思いません。
全体として、しばらくの間両方を使用した後、私は常にRPCを使用します。これは、より軽量で、テストとデバッグが簡単で、RequestFactoryを使用するよりも高速です。RequestFactoryは、RPCカウンターパートよりもエレガントで拡張可能かもしれませんが。追加された複雑さは、それを必要とするより良いツールにしません。
私の意見では、最良のアーキテクチャは2つのWebアプリ、1つのクライアントと1つのサーバーを使用することです。サーバーは、servlet.jarライブラリを使用するシンプルで軽量な汎用JavaWebアプリケーションです。クライアントはGWTです。GWT-RPCを介してクライアントWebアプリケーションのサーバー側にRESTfulリクエストを送信します。クライアントのサーバー側は、サーバーサーブレットWebアプリケーションで単一のサーブレットとして実行しているリクエストハンドラーへの永続的なトンネルを使用するApachehttpクライアントへの単なるパススルーです。サーブレットWebアプリケーションには、データベースアプリケーション層(hibernate、cayenne、sqlなど)が含まれている必要があります。これにより、データベースオブジェクトモデルを実際のクライアントから完全に切り離して、アプリケーションを開発およびユニットテストするためのはるかに拡張可能で堅牢な方法を提供できます。確かに、少しの初期セットアップ時間が必要ですが、しかし、最終的には、GWTの外部にある動的リクエストファクトリを作成できます。これにより、両方の長所を活用できます。gwtクライアントをコンパイルまたはビルドしなくても、サーバー側でテストおよび変更を行うことができることは言うまでもありません。