Сравнение между Не сохраняющим состояние (на коде Google) и [закрытым] Windows Workflow

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

Я загрузил платформу Не сохраняющую состояние с Google Code, и собираюсь начать играть с ним, но хотел бы услышать то, что там используют другие программисты.NET.

РЕДАКТИРОВАНИЕ, Не сохраняющее состояние, кажется действительно простым реализовать, но я действительно задаюсь вопросом, является ли это правильная вещь для машины леденца. В автоматизации я всегда чувствую себя противоречивым о том, как должны использоваться конечные автоматы. Хотя я использую термин "конечный автомат", я делаю так свободно, потому что я использую его больше как блок-схема. Вместо того, чтобы использовать состояния для представления текущего режима машина находится в, я использую его для выполнения функций. Так в этом случае с Не сохраняющим состояние, я на самом деле использовал бы переход от одного состояния до следующего как механизм для того, чтобы вызвать функции в моем контроллере машины леденца. Мысли?

33
задан user7116 5 July 2011 в 19:40
поделиться

1 ответ

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

Stateless

Pros

  • open source
  • синтаксически лаконичный и легкий для чтения
  • довольно хорошие примеры в ртутном репозитории в коде Google
  • Я могу перевести свою диаграмму состояний UML в код, используя очень быстро.
  • поддерживать состояние очень просто - я могу легко добавлять и удалять. Методы расширения позволяют мне настраивать состояния в отдельных строках, поэтому я могу закомментировать триггеры или действия, которые я не хочу использовать.
  • передача данных в / из конечного автомата проста, и вы можете делать это, как хотите, в коде программной части.
  • аналогично, конечный автомат может обновлять графический интерфейс пользователя различными способами. Прямо сейчас я изменяю данные через интерфейс, а затем графический интерфейс использует таймер для обновления своих элементов. Я также, вероятно, мог бы использовать для этого BackgroundWorker.
  • Я только начал использовать подсостояния для обработки своего графического интерфейса, который должен управлять различными состояниями, такими как «Работает», «Приостановлено», «Прервано» и «Ожидание». Состояние «Приостановлено» имеет подсостояния, потому что пользователь может приостановить систему различными способами, но триггеры возобновления зависят от способа, которым они были приостановлены. Мне нравится управлять включением / отключением графического интерфейса и всплывающими подсказками с помощью облегченной структуры конечного автомата.

Минусы

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

Windows Workflow Foundation

Плюсы

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

Минусы

  • графический подход к разработке рабочего процесса скрывает тот факт, что это довольно сложная вещь
  • , чтобы использовать постоянство и получить паузу / возобновить / прервать, у вас установить и настроить «службу постоянства», которую мне еще предстоит выяснить, как заставить ее работать. Я могу нормально настроить базу данных SQL, но во время выполнения получаю кучу непонятных ошибок.
  • потому что это от MS, вы не знаете, будет ли он очень долго или полностью исчезнет. Обработка ошибок
  • немного странная, потому что вы можете использовать код позади или FaultHandler
  • , передающий данные из WF в ваше основное приложение, сложно и требует чего-то вроде WCF (еще одна технология, у меня нет времени, чтобы изучить ее должным образом. прямо сейчас) или используйте интерфейс ExternalDataExchange.
41
ответ дан 27 November 2019 в 18:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: