2

私は RequestFactory で GWT 2.4 を使用していますが、まだすべてがはっきりしているわけではありません。

この記事で著者は、エンティティ プロキシを の 1 つのインスタンスで使用し、このエンティティ プロキシを の他のインスタンスで再利用 () したい状況について書きましRequestContextedit()RequestContext

すでに requestContext が割り当てられているため、編集できません。変更したい場合は、このエンティティのインスタンスをサーバーから再度取得する必要があります

しかし、このコードを実行しても例外は発生しません:

RequestContext newRequest1 = factory.myRequest();
newRequest1.edit(proxy);
RequestContext newRequest2 = factory.myRequest();
newRequest2.edit(proxy);

このバージョンを実行すると、autor で説明されている問題 (例外) がポップアップします。

RequestContext newRequest1 = factory.myRequest();
MyProxy edited = newRequest1.edit(proxy);
RequestContext newRequest2 = factory.myRequest();
newRequest2.edit(edited);

したがって、によって返される編集可能なコピーのみedit()が RequestContext インスタンスに直接関連付けられているようです。

その場合、編集ビューに (編集不可/凍結された) プロキシのインスタンスを 1 つ保持し、ユーザーが「編集」ボタンをクリックするたびedit()に、新しい新しい RequestContext を使用するアプローチに何か問題がありますか? または、毎回プロキシの新しいインスタンスも取得する必要がありますか?

プロキシの新しいインスタンスを取得するのは少し面倒ですが、1 つのプロキシ インスタンスを再利用すると、変更のデルタをサーバーに送信することに関連する問題が発生する可能性があります。

質問を言い換えると、プロキシの単一インスタンスを複数で再利用することをお勧めしますRequestContextsか?

4

1 に答える 1

1

一度に編集可能なインスタンスが 1 つしかない限り、同じプロキシを 2 回 (またはそれ以上) 編集しても問題ありません (最初のコード スニペットはスローする必要があります。そうでない場合はバグです。維持しないと機能する可能性があります)。RequestContextと編集されたプロキシの両方の参照)。

RequestFactory は変更されたプロパティのみをサーバーに送信することに注意してくださいedit()。そのため、サーバー側/永続化されたデータをできるだけクライアント側のデータに近づけるために、最新のインスタンスを使用するようにしてください (明白に思えるかもしれませんが、実際にはいくつかの驚きにつながる可能性があります: foo onが表示される場合クライアントはサーバーにバーを持っていますが、クライアント側のプロパティをfoo以外に変更するまで、サーバー側にバーを保持します)

于 2012-04-29T17:37:10.890 に答える