2009-08-26 116 views
8

我想发出一系列命令执行,但只有在先前的命令成功时才执行。现在我在命令对象中引发一个事件,指出命令是成功还是失败。我正在使用它来控制执行,但它感觉不雅。命令模式:按顺序执行多个命令

例子:

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

这工作,但感觉笨拙,不直观。我可以在Execute()上传递一个布尔值来指示成功或失败,但是这是沿着相同的路径。我可以在失败时抛出异常,这可能会导致更干净的代码,但可能是矫枉过正。

有什么建议吗?

回答

7

我通过设置命令“链”来解决这个问题。我创建了一个包含其他命令的Command对象,然后在调用Do时依次激发它们。在你的情况下,你可以让命令调用委托,并且只有在成功的时候才会触发序列中的下一个命令。

一种方法来做到这一点,我想。

+3

是责任链模式在这里很有用。 – pjp 2009-08-26 22:18:14

+1

不知道它被称为那个。谢谢(你的)信息。 – 2009-08-26 22:33:18

+0

责任链模式似乎很适合。感谢您的回应。 – Josh 2009-08-26 23:13:16

1

返回一个布尔值或表示某种状态的对象并不是那么糟糕。它可能会感觉笨拙,但它很简单明了。

一个实现我用的是这样的:

首先,我添加Command对象到列表中。

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; 
}