Платформы конечного автомата для .NET

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

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

Вместо WF я думаю попытаться реализовать старый простой шаблон GoF «State» и использовать Spring.NET для соединения всего вместе. Есть ли что-нибудь, что уже делает это или что-то подобное?


person Andy White    schedule 10.03.2009    source источник
comment
Если вам нужен конечный автомат, управляемый сообщениями, то есть множество связанных с этим проблем, которые могут вас беспокоить. См. Что такое Akka.NET и Какие проблемы решает акторная модель. Может соответствовать вашим потребностям.   -  person ToolmakerSteve    schedule 27.03.2020
comment
Вас также может заинтересовать связанная тема Реактивное программирование. Для этого в Akka есть Reactive Streams. Альтернативой являются наблюдаемые потоки ReactiveX. Обязательно изучите поддержку обратного давления в любой технологии, которую вы выберете.   -  person ToolmakerSteve    schedule 27.03.2020


Ответы (7)


В зависимости от ваших конкретных требований вы можете обнаружить, что компилятора конечного автомата достаточно для реализации шаблона GoF "State". Он может генерировать C#, а также точки, которые можно преобразовать в несколько форматов изображений с помощью Graphviz. Я использовал его в предыдущем проекте и нашел его достаточным для создания «простого» конечного автомата. Надеюсь, это поможет.

person Bas Bossink    schedule 10.03.2009
comment
Я использовал SMC для кода пользовательского интерфейса С#. Это сработало хорошо для меня. Шаблон состояния трудно поддерживать с течением времени. DSL от SMC упрощает техническое обслуживание. - person Todd Stout; 16.10.2009

Два отличных конечных автомата для .NET

  • без сохранения состояния — создавайте конечные автоматы и упрощенные рабочие процессы на основе конечных автоматов непосредственно в коде .NET.
  • Automatonymous — библиотека конечных автоматов для .Net — позволяет писать конечные автоматы в свободном стиле.
person Mark    schedule 20.06.2015
comment
Я использовал Stateless бесчисленное количество раз, очень прост в использовании и расширении. Я также использовал его в некоторых приложениях с очень высокой нагрузкой и малой задержкой. Он работал безупречно. - person jolySoft; 22.07.2015

Взгляните на NState

https://github.com/benaston/NState

https://nuget.org/packages/NState/.

Отказ от ответственности: я поддерживаю это.

person Ben Aston    schedule 30.03.2013

Я поддерживаю проект с открытым исходным кодом, который реализует (среди прочего) универсальный конечный автомат для .NET. Он создан на основе QuickGraph, поэтому многие алгоритмы анализа графов предоставляются бесплатно. См. эту страницу для получения дополнительной информации.

person Steve Guidi    schedule 07.12.2009

Вы можете рассмотреть North State Framework на C#. Хотя это не открытый исходный код, его лицензия относительно недорога. Это единственная известная мне структура, которая допускает повторное использование через композицию конечного автомата и наследование. Другими словами, вы можете наследоваться от базового конечного автомата всего несколькими строками кода и добавлять состояния, переходы, действия и т. д. Вы также можете взять существующий класс конечного автомата и «подключить его» к другому конечному автомату. Вы не поверите, насколько проще реализовывать и работать с конечными автоматами, используя эту структуру, по сравнению с GOF или другими шаблонами.

person Mark Uebel    schedule 31.01.2012
comment
North State Framework теперь имеет открытый исходный код с возможностью двойной лицензии для коммерческого и некоммерческого использования. Вы можете найти его на GitHub. - person Mark Uebel; 10.11.2015

Взгляните на StateBuilderDotNet, генератор кода конечного автомата, который преобразует XML-описание конечного автомата в расширенную версию шаблон состояния C#. Он поддерживает всю семантику UML: конечный автомат может быть иерархическим, параллельным и асинхронным. Также доступен графический инструмент для создания конечных автоматов.

Отказ от ответственности: я являюсь автором этого программного обеспечения.

person Frederic Heem    schedule 23.01.2012

Я создал Staty, который представляет собой умный конечный автомат для .NET. Написанный как переносимая библиотека классов C# (PCL), Staty представляет собой выразительный конечный автомат, управляемый событиями, с такими функциями, как

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

Он бесплатный, с открытым исходным кодом, доступен на NuGet и основан на идеях Конечный автомат C++ Дэвида Лафреньера, который является самым известным конечным автоматом в C++.

person Alexander Pacha    schedule 07.07.2016