2009-08-26 7 views
8

以前のコマンドが成功した場合にのみ、一連のコマンドを実行します。今は、コマンドオブジェクト内で、コマンドが成功したか失敗したかを示すイベントを発生させています。私は実行を制御するためにこれを使用していますが、それは控えめであると感じます。コマンドパターン:複数のコマンドを順番に実行

例:

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

これは動作しますが、それは不器用なと直感的に感じています。成功または失敗を示すExecute()のブーリアン・バックを渡すことができますが、それは同じパスに沿っています。私は失敗時に例外をスローすることができます。これによりコードがより洗練されてしまうかもしれませんが、過度の攻撃になる可能性があります。

提案がありますか?

答えて

7

私はコマンド "チェーン"を設定することでこれを回避しました。他のコマンドを保持するCommandオブジェクトを作成し、Doが呼び出されたときにそれらを順番に起動します。あなたのケースでは、コマンドが代理人を呼び出すことができ、それが成功した場合にのみ、シーケンス内の次のコマンドを起動することができます。

これを行うには1つの方法だと思います。

+3

はいChain of Responsibilityパターンがここに便利です。 – pjp

+1

それはそれが呼ばれたことを知らなかった。情報をありがとう。 –

+0

連鎖責任パターンは適切であるようです。応答していただきありがとうございます。 – Josh

1

ステータスを表すブール値またはオブジェクトを返すことはそれほど悪くありません。不気味かもしれませんが、シンプルでクリアです。

まず、私はコマンドリストにオブジェクトを追加:私が使用

一つの実装では、このようなものです。

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

そして、Commandオブジェクトのリストは、次のように実行されます:

foreach (ICommand command in commands) 
{ 
    bool success = command.Execute(); 
    if (!success) break; 
} 
関連する問題