エラー処理とテスト機能が貧弱な RequestFactory とは異なり (GWT のフードの下でほとんどのものを処理するため)、RPC ではよりサービス指向のアプローチを使用できます。RequestFactory は、複雑なポリモーフィック データ構造を呼び出す必要がある場合に便利なアプローチを提供できる、より最新の依存性注入スタイルのアプローチを実装します。RPC を使用する場合、データ構造をよりフラットにする必要があります。これにより、マーシャリング ユーティリティが json/xml と Java モデルの間で変換できるようになります。Google の Web サイトの gwt dev セクションから引用されているように、RPC を使用すると、より堅牢なアーキテクチャを実装することもできます。
「シンプルなクライアント/サーバー展開
サービス定義を考える最初の最も簡単な方法は、サービス定義をアプリケーションのバックエンド全体として扱うことです。この観点から、クライアント側のコードは「フロント エンド」であり、サーバー上で実行されるすべてのサービス コードは「バック エンド」です。このアプローチを取る場合、サービスの実装は、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 ライブラリを使用するシンプルで軽量な汎用 Java Web アプリケーションです。クライアントは GWT です。クライアント Web アプリケーションのサーバー側に GWT-RPC を介して RESTful 要求を行います。クライアントのサーバー側は、サーバー サーブレット Web アプリケーションで単一のサーブレットとして実行している要求ハンドラーへの永続的なトンネルを使用する apache http クライアントへの単なるパスです。サーブレット Web アプリケーションには、データベース アプリケーション層 (hibernate、cayenne、sql など) が含まれている必要があります。これにより、データベース オブジェクト モデルを実際のクライアントから完全に切り離すことができ、アプリケーションを開発および単体テストするためのはるかに拡張可能で堅牢な方法が提供されます。確かに、初期設定には少し時間がかかりますが、しかし最終的には、GWT の外部にある動的なリクエスト ファクトリを作成できます。これにより、両方の長所を活用できます。gwt クライアントをコンパイルまたはビルドすることなく、サーバー側をテストおよび変更できることは言うまでもありません。