2011-01-20 3 views
5

У меня есть инструмент winform, который взаимодействует с аппаратным обеспечением с помощью последовательного порта.Какой шаблон дизайна лучше всего использовать для управления последовательностью шагов?

Последовательный порт используется для отправки команд на аппаратное обеспечение, которое будет подтверждать команды и иногда возвращать данные.

Для выполнения задачи несколько команд необходимо отправить на оборудование в определенном порядке.

Я успешно реализовал инструмент, используя оператор switch для управления отправкой команд. Однако, хотя это работает, я не могу не думать о том, что есть лучший, более простой способ сделать это - есть ли?

Текущая реализация ниже:

Каждый случай является команда, которая нуждается в отправке к аппаратному обеспечению. Метод отправки передается метод вызова и идентификатор следующего шага - который будет возвращен, если команда отправлена ​​успешно.

  • Инструмент отправит команду запуска сеанса на оборудование.
  • Аппаратное обеспечение подтверждает команду.
  • Инструмент отправляет команду указания направления на аппаратное обеспечение.
  • Аппаратное обеспечение подтвердит команду.

т.д.

MessageID nextStep = MessageID.IMS; 

while (nextStep != MessageID.Stop) 
{ 
    switch (nextStep) 
    { 
     case MessageID.ISS: 
      nextStep = Send(new ISS_StartSession(), MessageID.IE386); 
      RaiseProgressEvent(10); //percentage complete 
      break; 

     case MessageID.IE386: 
      nextStep = Send(new IE386_SetDirection(Direction.BOTH), MessageID.IE378); 
      RaiseProgressEvent(20); 
      break; 

     //etc 

     case MessageID.Error: 
      HandleError(); //abort task if necessary 
      break; 
    } 
} 

Есть ли лучший способ сделать это ..?

Есть ли хорошо известный дизайн, на который я должен обратить внимание?

+0

Является ли следующий MessageID отправленным на текущий звонок «Отправить»? –

ответ

1

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

+0

Фрэнк, как это бывает, методы, переданные методу отправки выше, реализуют (я считаю) шаблон команды. Каждый из этих методов реализует интерфейс ICommand и подробно описывает, как выполнить команду через последовательный порт. Для вызывающего класса нужно знать, когда должны выполняться ICommands. Именно это я и хотел улучшить .. – Kildareflare

+0

@Frank Как использовать ответ Step1 в некоторых последующих шагах? и как выполнить следующий шаг, когда Step2 закончен? – Ewoks

3

Я думаю государство является DP вы ищете.

0

Я бы предложил схему цепочки ответственности, поскольку этапы могут быть связаны цепями, и вы можете управлять ссылками в цепочке на уровне клиента.

Смежные вопросы