24

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

有没有什么好的开源框架可以在 .NET 中实现状态机?我查看了最新版本的 Windows Workflow,它似乎是一个不错的选择;但是,我对默认的持久性机制(我们需要报告状态转换数据)、可测试性以及 WF 团队在我们所说的(假设)重新构建框架这一事实有些担忧。

而不是WF,我正在考虑尝试实现一个普通的GoF“状态”模式,并使用Spring.NET将所有东西连接在一起。有没有什么东西已经这样做了,或者类似的东西?

4

7 回答 7

14

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

于 2009-03-10T22:03:33.720 回答
8

.NET 的两个很棒的状态机

  • 无状态- 直接在 .NET 代码中创建状态机和基于轻量级状态机的工作流
  • Automatonymous - .Net 的状态机库 - 允许您编写流畅的状态机
于 2015-06-20T06:41:52.290 回答
4

看看 NState

https://github.com/benaston/NState

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

免责声明:我维护它。

于 2013-03-30T13:01:52.257 回答
1

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

于 2009-12-07T20:42:05.703 回答
1

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

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

于 2012-01-23T23:19:07.200 回答
1

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

于 2012-01-31T01:48:49.537 回答
0

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

  • 并发安全
  • 外部和内部事件
  • 每个州单独的班级
  • 进入和退出动作和
  • 用于配置状态机的流畅语法。

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

于 2016-07-07T14:39:32.317 回答