State Machine Framework для .NET.
В моей работе есть система, которая в основном представляет собой конечный автомат, управляемый сообщениями. Он принимает различные типы сообщений, просматривает какой-то контекст/состояние на основе сообщения, а затем решает, что делать, на основе сообщения и текущего состояния. Обычно результатом является сообщение, отправленное из системы.
Есть ли хорошие рамки с открытым исходным кодом для реализации конечного автомата в .NET? Я рассмотрел последнюю версию Windows Workflow, и похоже, что это будет хороший вариант; однако у меня есть некоторые проблемы с механизмами сохранения по умолчанию (мы должны сообщать данные о состоянии перехода), тестируемостью и тем фактом, что команда WF перестраивает структуру, когда мы говорим (предположительно).
Вместо WF я подумываю о попытке реализовать простой шаблон "State" GoF и использовать Spring.NET для подключения всего вместе. Есть ли что-то, что уже делает это, или что-то подобное?
Ответы
Ответ 1
В зависимости от ваших точных требований вы можете найти State Machine Compiler, достаточный для реализации шаблона State State. Он может генерировать С#, а также точку, которая может быть преобразована в несколько форматов изображений, используя Graphviz. Я использовал его в предыдущем проекте и счел его достаточным для создания "простого" конечного автомата. Надеюсь, это поможет.
Ответ 2
Взгляните на NState
https://github.com/benaston/NState
https://nuget.org/packages/NState/.
Отказ от ответственности: я поддерживаю его.
Ответ 3
Две большие машины состояний для .NET.
- Stateless - Создавать государственные машины и облегченные рабочие процессы на основе машинного процесса непосредственно в коде .NET.
- Automatonymous - Библиотека конечных автоматов для .Net - позволяет писать свободно управляемые машины стиля
Ответ 4
Я поддерживаю проект с открытым исходным кодом, который реализует (помимо прочего) общий конечный конечный автомат для .NET. Он построен поверх QuickGraph, поэтому вы получаете множество алгоритмов графического анализа бесплатно. Подробнее см. эту страницу.
Ответ 5
Посмотрите StateBuilderDotNet, генератор кода конечного автомата, который преобразует XML-описание конечного автомата в расширенную версию состояния С# шаблон. Он поддерживает всю семантику UML: конечный автомат может быть иерархическим, параллельным и асинхронным. Графический инструмент также доступен для создания государственных машин.
Отказ от ответственности: я являюсь автором этого программного обеспечения.
Ответ 6
Вы можете рассмотреть North State Framework в С#. Хотя он не является открытым исходным кодом, относительно недорого лицензировать. Это единственная структура, которую я знаю о том, что позволяет повторно использовать состав и наследование штата. Другими словами, вы можете наследовать с базового компьютера состояний только с несколькими строками кода и добавлять состояния, переходы, действия и т.д. Вы также можете взять существующий класс состояния машины и "подключить его к другому государственному компьютеру". Вы не поверите, насколько проще реализовать и работать с государственными машинами, используя эту структуру, относительно GOF или других шаблонов.
Ответ 7
Я создал Staty, который является интеллектуальным государственным компьютером для .NET. Написанная как переносная библиотека классов С# (PCL), Staty является выразительной управляемой событиями машиной состояния с такими функциями, как
- Совпадение-безопасность
- внешние и промежуточные события
- отдельные классы для каждого состояния
- действия входа и выхода и
- свободный синтаксис для настройки состояния машины.
Бесплатно, с открытым исходным кодом, доступно на NuGet и на основе идей David Lafreniere С++ State Machine, который является самой известной государственной машиной на С++.