Какой шаблон проектирования лучше всего использовать для контроля последовательности шагов? - PullRequest
5 голосов
/ 20 января 2011

У меня есть инструмент 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;
    }
 }

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

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

Ответы [ 4 ]

3 голосов
/ 20 января 2011

Полагаю, Состояние - это DP, который вы ищете.

3 голосов
/ 20 января 2011

Похоже на конечный автомат.В сети много ресурсов о них.Посмотрите.

http://en.wikipedia.org/wiki/Abstract_state_machines

1 голос
/ 20 января 2011

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

0 голосов
/ 24 августа 2016

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

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