Фреймворки конечных автоматов для .NET - PullRequest
19 голосов
/ 11 марта 2009

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

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

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

Ответы [ 7 ]

13 голосов
/ 11 марта 2009

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

4 голосов
/ 20 июня 2015

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

  • Без состояний - Создание конечных автоматов и облегченных рабочих процессов на основе конечных автоматов непосредственно в коде .NET
  • Automatonymous - библиотека конечных автоматов для .Net - позволяет вам писать конечные автоматы в свободном стиле
4 голосов
/ 30 марта 2013

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

https://github.com/benaston/NState

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

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

1 голос
/ 31 января 2012

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

1 голос
/ 24 января 2012

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

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

1 голос
/ 07 декабря 2009

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

0 голосов
/ 07 июля 2016

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

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

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

...