2009-08-26 5 views
8

Я хочу выпустить серию выполнения команд, но только тогда, когда предыдущая команда сработала. Прямо сейчас я поднимаю событие внутри объекта команды, указывающее, была ли команда успешной или неудачной. Я использую это для контроля исполнения, но он чувствует себя неэлегантным.Command Pattern: Выполнение нескольких команд в последовательности

Пример:

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

Это работает, но он чувствует себя неуклюжим и неинтуитивными. Я мог бы передать логическое значение в Execute(), указывающее на успех или неудачу, но это по тому же пути. Я мог бы исключать ошибки при сбое, что могло бы привести к более чистым кодам, но может быть излишним.

Любые предложения?

ответ

7

Я обошел это, установив команду «цепь». Я создал объект Command, который содержит другие команды, затем запускайте каждый из них по очереди, когда вызывается Do. В вашем случае вы могли бы вызвать команду делегата и только отменить следующую команду в последовательности, если она была успешной.

Один из способов сделать это, я полагаю.

+3

Да цепочка обязанностей здесь полезна. – 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; 
} 
Смежные вопросы