8

一連のコマンド実行を発行したいのですが、前のコマンドが成功した場合のみです。現在、コマンドが成功したか失敗したかを示すイベントをコマンドオブジェクト内で発生させています。私はこれを使用して実行を制御していますが、エレガントではありません。

例:

command1.CommandSucceeded += delegate { command2.Execute(); };
command1.Execute();

これは機能しますが、不器用で直感的ではありません。Execute()でブール値を返して、成功または失敗を示すことができますが、それは同じパスに沿っています。失敗したときに例外をスローすることができます。これにより、コードがよりクリーンになる可能性がありますが、やり過ぎになる可能性があります。

助言がありますか?

4

2 に答える 2

7

コマンド「チェーン」を設定することでこれを回避しました。他のコマンドを保持するCommandオブジェクトを作成し、Doが呼び出されたときに各コマンドを順番に起動します。あなたの場合、コマンドにデリゲートを呼び出して、成功した場合にのみシーケンス内の次のコマンドを実行することができます。

それを行う一つの方法だと思います。

于 2009-08-26T22:16:06.710 に答える
2

あるステータスを表すブール値またはオブジェクトを返すことはそれほど悪くありません。不器用に感じるかもしれませんが、シンプルでわかりやすいです。

私が使用する実装の1つは、次のようなものです。

まず、コマンドオブジェクトをリストに追加します。

List<ICommand> commands = new List<ICommand>;
commands.Add(command1);
commands.Add(command2);

次に、コマンドオブジェクトのリストは次のように実行されます。

foreach (ICommand command in commands)
{
  bool success = command.Execute();
  if (!success) break;
}
于 2009-08-26T22:24:43.947 に答える