Лучшие практики проектирования FSM для длительных процессов

Я в первую очередь разработчик С# и ищу некоторые рекомендации (теория и/или образцы кода) по разработке конечного автомата для серии длительных процессов. Каждая определенная операция может выполняться в течение нескольких минут. Я просто использую планировщик заданий Windows для управления планированием и созданием экземпляров.

Ниже приведен упрощенный план того, на что я смотрю. До сих пор я построил FSM Op Status, используя Stateless. Теперь я пытаюсь выяснить, как наилучшим образом справиться с последовательностью операций с добавлением некоторых условий, таких как пункт № 3. Эти условия основаны на данных, полученных из Op2.

Варианты, которые я рассматривал до сих пор:

  • Создайте FSM для последовательности операций (кажется слишком сложным, но, возможно, я где-то упустил фундамент)
  • Создайте диспетчера операций для каждой операции, и пусть каждый менеджер беспокоится о том, в каком состоянии он заинтересован, а также о том, каким должно быть следующее состояние.

ОПЕРАЦИИ -> СЛЕДУЮЩАЯ ОПЕРАЦИЯ

  1. Нет -> Op1
  2. Op1 -> Op2
  3. Op2 -> Op3 или Op4 условно
  4. Op3 -> Op4
  5. Op4 -> Op5
  6. Op5 -> Нет

СТАТУС РАБОТЫ

  • Idle
    • Trigger: Scheduled -> Pending
    • Ограничение: Операция должна быть установлена
  • Pending
    • Trigger: Run -> Running
  • Running
    • Trigger: Failed -> Error
    • Триггер: Успех -> Бездействие
    • Триггер: Не готов -> Ожидание
  • Error
    • Trigger: Retry -> Pending
    • Триггер: Cancel -> Idle (удалить назначенную операцию)

person Ken    schedule 18.09.2012    source источник


Ответы (1)


Это действительно похоже на конкретный вариант использования, предназначенный для Windows Workflow Foundation. Он предоставляет все необходимые возможности для обработки сценариев такого типа, включая возможность сохранять рабочие процессы, перезапускать их и т. д.

person Reed Copsey    schedule 18.09.2012
comment
Я использовал WWF для предыдущих проектов. Основные проблемы, с которыми я столкнулся, — это хлопотный рефакторинг и редактор, который, кажется, быстро раздувается. - person Ken; 18.09.2012