用于.NET的状态机框架

时间:2009-03-10 21:40:15

标签: .net design-patterns frameworks state-machine

我的工作系统基本上是一个消息驱动的状态机。它接收各种类型的消息,根据消息查找某些上下文/状态,然后根据消息和当前状态决定要执行的操作。通常结果是消息被发送出系统。

在.NET中实现状态机是否有任何良好的开源框架?我查看了最新版本的Windows Workflow,看起来这是一个不错的选择;但是,我对默认持久性机制(我们需要报告状态转换数据),可测试性以及WF团队正在重新设计框架(我们说的话)(假设)这一事实有一些担忧。

而不是WF,我正在考虑尝试实现一个普通的GoF“State”模式,并使用Spring.NET将所有内容连接起来。有什么东西可以做到这一点,或者类似的东西吗?

7 个答案:

答案 0 :(得分:13)

根据您的具体要求,您可能会发现State Machine Compiler足以实现GoF“状态”模式。它可以生成C#以及可以使用Graphviz转换为多种图像格式的点。我在以前的项目中使用它,发现它足以生成一个“简单”的状态机。我希望这有帮助。

答案 1 :(得分:4)

看看NState

https://github.com/benaston/NState

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

免责声明:我保留它。

答案 2 :(得分:4)

.NET的两个很棒的状态机

  • Stateless - 直接在.NET代码中创建状态机和基于状态机的轻量级工作流
  • Automatonymous - .Net的状态机库 - 允许您编写流畅的样式状态机

答案 3 :(得分:1)

我维护了一个开源项目,该项目实现了.NET的通用有限状态机(除此之外)。它建立在QuickGraph之上,因此您可以免费获得许多图形分析算法。有关详细信息,请参阅this page

答案 4 :(得分:1)

查看StateBuilderDotNet,这是一个状态机代码生成器,它将状态机的XML描述转换为C#状态模式的扩展版本。它支持所有UML语义:状态机可以是分层的,并发的和异步的。还可以使用图形工具来创建状态机。

免责声明:我是这些软件的作者。

答案 5 :(得分:1)

您可以考虑North State Framework in C#。虽然它不是开源的,但许可证相对便宜。它是我所知道的唯一允许通过状态机组合和继承重用的框架。换句话说,您可以从只有几行代码的基本状态机继承,并添加状态,转换,操作等。您还可以使用现有的状态机类并将其“插入”另一个状态机。相对于GOF或其他模式,您不会相信使用此框架实现和使用状态机会更容易。

答案 6 :(得分:0)

我创建了Staty这是.NET的智能状态机。作为C#可移植类库(PCL)编写,Staty是一个具有表现力的事件驱动状态机,具有

等功能
  • 同意安全
  • 外部和内部事件
  • 每个州分开的课程
  • 进入和退出操作以及
  • 用于配置状态机的流畅语法。

它是免费的,开源的,可在NuGet上获得,并基于David Lafreniere's C++ State Machine的想法,这是C ++中最着名的状态机。