2009-08-26 16 views
8

Deseo emitir una serie de ejecuciones de comandos, pero solo cuando el comando anterior tuvo éxito. En este momento estoy planteando un evento dentro del objeto de comando que indica si el comando tuvo éxito o falló. Estoy usando esto para controlar la ejecución, pero se siente poco elegante.Patrón de comando: ejecución de varios comandos en secuencia

Ejemplo:

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

Esto funciona, pero se siente torpe y poco intuitivo. Podría pasar un booleano en Execute() indicando éxito o falla, pero eso es a lo largo de la misma ruta. Podría lanzar excepciones en caso de falla, lo que podría dar como resultado un código más limpio, pero podría ser excesivo.

¿Alguna sugerencia?

Respuesta

7

Lo solucioné configurando un comando "cadena". Creé un objeto Command que contiene otros comandos, luego disparo cada uno de ellos cuando se llama Do. En su caso, podría hacer que el comando llame al delegado y solo disparar el siguiente comando en la secuencia si fue exitoso.

Una forma de hacerlo, supongo.

+3

Si la cadena de patrón de responsabilidad es útil aquí. – pjp

+1

No sabía que se llamaba así. Gracias por la info. –

+0

El patrón de cadena de responsabilidad parece ser una buena opción. Gracias por la respuesta. – Josh

1

La devolución de un booleano o un objeto que representa algún estado no es tan malo. Puede parecer torpe, pero es simple y claro.

Una aplicación que utilizo es algo como esto:

Primero añado los objetos de comando en una lista.

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

A continuación, la lista de objetos de comando es ejecutado como esto:

foreach (ICommand command in commands) 
{ 
    bool success = command.Execute(); 
    if (!success) break; 
} 
Cuestiones relacionadas