0

私たちのプロジェクトの 1 つで、フロント エンドに flex を使用し、バックエンドに blazeds/java を使用しています。サービスが事前に記述されている既存のコードです。バックエンドで 3 つのサービス (基本的には 3 つのリモート オブジェクト) を呼び出し、その結果を取得してオブジェクトに保存し、このオブジェクトのデータをビューに表示する必要があります。現在、フロントエンドでは Flex と Parsley Framework を使用しています。以下の方法を考えていました。

1) サービス呼び出しごとにコマンドを作成し、その結果を共有オブジェクト (モデル) に格納してから、このモデルをビューに表示します。このアプローチの問題は、他の Web ページでいくつかのサービスが必要であるにもかかわらず、同じモデルを必要としないことです。このシナリオをどのように処理すればよいですか? 非同期のリモート呼び出しを行って結果を取得し、結果を格納するイベント オブジェクトを使用して再度ディスパッチしてイベントする必要があります。

2)サービス呼び出しを行い、結果を待ってから別の呼び出しを行い、結果を待ってから別の呼び出しを行いますが、これが正しい方法かどうかわかりませんか?

このようなシナリオを処理するための最適なソリューションは何ですか。ご協力いただきありがとうございます。

4

2 に答える 2

1

呼び出しの 3 つの結果を保持する単一のオブジェクトを作成し、すべての応答ハンドラーがオブジェクトに応答を入れて、最後に到着した呼び出しではないことを確認することができます。

例:

class ManyResult
  var firstResult:*
  var secondResult:*
  var thirdResult:*

  function get complete():Boolean { return firstResult && secondResult && thirdResult; }

各ハンドラーには、次の一般的なロジックがあります。
結果
を解析し、解析結果を ManyResult オブジェクトに入れます。

ManyResult.complete の場合:
  method_which_glues_all_three_results_together()

簡単に面倒になるため、この問題が頻繁に発生する場合は、このソリューションの使用をお勧めしません。クリーンで標準的な方法でこれを行う汎用コードを自分で作成することをお勧めします。

于 2010-12-28T20:40:35.460 に答える
1

だから、私はあなたの問題が何であるかについてまだ混乱していると思うので、バックエンドに対して3つの無関係な呼び出しを行う場合に取るアプローチを伝えることで、それに答えようとします.

私はそれらすべてを次々とすぐに発射します。Flex のバックエンド呼び出しは常に非同期であるため、すぐに戻ります。これらの各呼び出しには、結果が返されたときのコールバック関数が含まれます。したがって、擬似(っぽい)コードでは、次のようになります。

makeRequest1(whenRequest1Finishes);
makeRequest2(whenRequest2Finishes);
makeRequest3(whenRequest3Finishes);

この場合makeRequest*、サーバー/メカニズムが呼び出しを行う方法を認識し、 と呼ばれる場所を定義した関数にコールバックするメソッドですwhenRequest*Finishes

これらの要求のそれぞれとは別に、UI に 3 つの異なる部分が更新されていると仮定すると、UI のこれらの領域が入力されるたびにデータを入力します。ただし、単純にデータを入力するわけではありません...ユーザーに到着したことを示します。これは、データが "飛んでいる" 微妙なアニメーション、またはデータが表示されると消える待機インジケーターです。3 つの個別の待機インジケーターの代わりに、3 つすべてが受信されるまで消えない UI 全体を満たす 1 つの待機インジケーターを作成できます。

いずれにせよ、呼び出しが相互に依存していない限り、私は呼び出しを連続的に行うことはありません。Flex に組み込まれている非同期性を利用して、3 つの呼び出しをすべて並行して行います。

これはあなたが探しているものですか?

于 2010-12-28T01:23:47.183 に答える