State Machine Frameworks для.NET

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

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

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

7 ответов

Решение

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

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

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

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

https://github.com/benaston/NState

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

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

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

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

Отказ от ответственности: я автор этих программ.

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

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

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

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

Другие вопросы по тегам