问题标签 [stateless-state-machine]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
5 回答
12686 浏览

c# - .NET 工作流引擎建议

我遇到了stateless,一个基于Simple State Machine for Boo的分层状态机框架,但使用 C# 3.0 配置

它易于配置和使用,我可能很快就会使用它。

但我只是想知道如果

  • 有人在实际项目中使用过无状态(如果是这样,您的意见是什么?)
  • .NET 还有其他好的工作流引擎吗?(WF除外)
0 投票
2 回答
10928 浏览

c# - 如何利用无状态框架

我想在我的代码中使用http://code.google.com/p/stateless将功能与其依赖项分开。我没有找到任何高级用法示例,所以这个问题是关于无状态框架最佳实践的。

我有以下配置(这只是示例,只有一种功能状态):

然后在哪里调用实际功能。我有以下想法,但每个想法都有优点和缺点:

1) 在 OnEntry() 中设置功能以及下一次触发:

所以如果我打电话

它以 State.Finished 或 State.Error 结束

  • 优势 - 一起
  • 缺点 - 解决方案不能真正单元测试

2)将状态机和功能分开,例如:

p>

  • 优点:状态机可以自己测试
  • 缺点:我很不喜欢

3)其他一些解决方案?

我会很高兴得到任何答案

0 投票
1 回答
12246 浏览

c# - 使用无状态的基本状态机设置

我有一些相当简单的状态需求(目前)。我想我想使用Stateless api 对这些进行建模。(但我对状态机知之甚少,所以我可能是错的。)

但我陷入了术语(特别是StateTrigger

这是一个例子:我有一个订单类。它设置了几个状态。它们是:新的、已填充的、已发货的、已完成的、已取消的。

我想要的一些简单的状态规则是允许这些状态转换:

  • 新建(默认)
  • 新建 -> 填充
  • 新 -> 取消
  • 填充 -> 运输
  • 已填充 -> 已取消
  • 填充 -> 运输
  • 运输 -> 完成

那么我在这里被绊倒的地方是我的“触发器”是什么?

以防万一需要更具体的示例,假设我想要这样的方法:

如果状态更新成功,这将返回 true。如何设置和使用无状态来实现这一点?

0 投票
2 回答
1143 浏览

c# - 无状态状态机框架和高 CPU 使用率

我正在使用无状态框架来创建状态机。我的主应用程序是一个控制台应用程序,它调用DataManager该类,该类调用GetData启动 a 的函数,然后使用状态机Task执行该函数。Receiver

我的问题是当 StateMachine 运行时我得到大约 50% 的 CPU 使用率!当我使用简单的 switch 语句和相同的 Task 实现 StateMachine 时,它​​以 0% 的 CPU 使用率运行!我有一些编码错误还是无状态框架的行为?

获取数据函数

数据管理器类

问候迈克尔

0 投票
1 回答
331 浏览

c# - 到处都是状态机?

在了解了状态机之后,我想把它放在我代码的每一类中。我很高兴以声明方式(或“流利地”)构建机器、处理事件并确保任何违反逻辑的行为都会引发异常。

你能批评我这种做法吗?或者,您可能会习惯性地为每个项目安装 Stateless 包(就像我一样)?

任何状态机过度使用的例子?

0 投票
1 回答
2289 浏览

c# - 无状态自动推进状态机

我最近一直在尝试无状态(C# 中的 HSM)(https://code.google.com/p/stateless/),但我遇到了一些我不确定如何实现的东西。

假设我有以下状态:

  • 开始。

  • 连接

  • 结束

我想要实现的是:当 TCP 连接(处于 Connect 状态)建立时,进入 Read 状态。或者,如果失败,则进入 Finish 状态(它可能会返回 Connect 状态并在超时后尝试新的连接)。

我如何使用无状态来实现此自动推进功能,因为从状态内触发触发器会导致堆栈溢出异常?

干杯

0 投票
1 回答
1590 浏览

c# - 我应该触发触发器以从有限状态机中的 OnEntry() 方法更改状态吗?

我正在使用无状态框架 ( https://code.google.com/p/stateless/ ) 在我的应用程序中对有限状态机进行建模。有些状态应该执行一些逻辑,然后立即移动到下一个状态。我想知道这样做是否是一种好习惯,如下所示:

这是好的 FSM 设计吗?如果没有,有什么更好的方法?我试图实现的想法是让某些状态自动将机器推进到下一个状态,而不需要一些外部代码等待 DoSomeStuff() 完成然后触发机器进入下一个状态。

0 投票
2 回答
3400 浏览

c# - 无状态:如何定义状态的初始子状态?

我在我们的应用程序中使用无状态来实现状态机的逻辑。我们有一个AcceptedFile具有其他内部(子)状态的状态。问题是我不知道我应该如何在我的代码中指示初始内部状态,以便当一个机器转换到AccptedFile状态它也会自动转换到它的初始内部状态。这是我为模拟这种行为所做的:

ReadyForAdvertising是一个内部状态。AcceptedFile这在大多数情况下都可以正常工作,但是每当我将状态机的初始状态设置为AcceptedFile这样时:

不会发生自动转换,因此机器将处于 AcceptedFile 状态而不是ReadyForAdvertising.

有没有更好的方法来实现这种行为?

0 投票
1 回答
6850 浏览

c# - 无状态状态机库 - 适当的结构方式?

人们在使用 c# 无状态库时如何构造他们的代码?

https://github.com/nblumhardt/stateless

我特别感兴趣的是这如何与注入的依赖关系以及正确的职责方法和正确分层联系在一起。

我目前的结构涉及以下内容:

我们应该在 OnEntry 钩子内实现所有流程(调用服务),还是在验证状态转换允许发生后在外部实现流程?如果是这样,我想知道如何进行事务管理。

我想我所追求的是那些已经使用无状态实现某些东西以及如何处理代码结构的人的一些最佳指导。

0 投票
1 回答
1494 浏览

c# - 使用无状态库将状态机拆分为多个类

在我正在使用的 C# 解决方案中,应用程序逻辑的核心通过(非常好的)无状态库实现为状态机。业务逻辑的其他部分在许多其他类中建模,用于应用程序显示的不同区域功能,但这是推动底层应用程序状态主要变化的部分。

尽管每个状态转换本身都非常简单(通知事件、设置 eventArgs、监听其他事件……)并且我在适用时使用子状态,但对我来说它开始看起来太大了。我知道这不是一个精确的衡量标准,但是如果您查看并考虑子状态,您最终可能会发现它们本身可能是不同的状态机。

是否有一种明显的方法可以让我用无状态构建单独的子状态机(可以这么说),将每个状态机映射到一个不同的类(和文件)?

我想到的第一个阻塞问题是(尤其是第二个):

  1. 一体式状态机触发所有状态更改的事件:拆分后,每个状态机将触发各自的触发器。所以最好有一个外观收集所有事件并为客户端重新触发它们,以便隐藏许多状态机(毕竟它们是客户端的实现细节)。

  2. 无状态子状态负责在状态/子状态链上以及向下的冒泡触发。因此,例如对于A具有子状态的给定状态,可以定义一个触发器(在一个地方A的配置),它将使状态机离开A,无论A我们将处于哪个子状态。这如何与单独的子状态机一起工作?