私はFlex プロジェクトでコマンド パターンを利用してきましたが、以下の間に非同期コールバック ルートが必要です。
- 与えられたコマンドオブジェクトとコマンドオブジェクトをインスタンス化した人は誰でも、
- コマンド オブジェクトと、コマンド オブジェクトが呼び出す「データ アクセス」オブジェクト (つまり、ネットワークを介してサーバーへのリモート プロシージャ コールを処理する人)。
これら 2 つのコールバック ルートのそれぞれが、1 対 1 の関係になる必要があります。これは、特定のコマンド クラスの複数のインスタンスがまったく同じジョブを同時に実行しているが、パラメーターがわずかに異なる可能性があるためであり、それらのコールバックが混同されることは望ましくありません。AS3 で非同期性を処理するデフォルトの方法であるイベントの使用は、本質的に 1 対多の関係に基づいているため、ほとんど役に立ちません。
現在、特定の種類のシグネチャを持つコールバック関数参照を使用してこれを行っていますが、誰かがより良い (または代替の) 方法を知っているかどうか疑問に思っていましたか?
私の現在の方法を説明する例を次に示します。
- ユーザー アクションによってインスタンスを生成するビュー オブジェクトがあり
DeleteObjectCommand
、それ自体のプライベート メンバー関数の 2 つ (成功の場合は 1 つ、失敗の場合は 1 つ: この例では"deleteObjectSuccessHandler()"
と"deleteObjectFailureHandler()"
) への参照をコマンド クラスのコールバック関数への参照として渡します。コンストラクタ。 - 次に、コマンド オブジェクトは、「データ アクセス」オブジェクトへの接続でこのパターンを繰り返します。
- ネットワーク上の RPC が正常に完了した (または失敗した) 場合、適切なコールバック関数が最初に「データ アクセス」オブジェクトによって呼び出され、次にコマンド オブジェクトによって呼び出されます。場所は、
deleteObjectSuccessHandler()
または呼び出されることによって通知されdeleteObjectFailureHandler()
ます。