问题标签 [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 投票
1 回答
154 浏览

state-machine - 动态状态进展的高级模式?

你有没有遇到过这样的情况,如果有,你是怎么解决的?

我们的记录经历了多个发展阶段,例如:

投稿->初评->终审-> 激活

这些主要状态类型的进展顺序是有保证的。然而,有一些因素使事情变得相当复杂:

  • 在记录移动到下一个状态之前,其中一些状态可能需要满足许多附加条件。这些条件或“子状态”中的一些可能是可选的,而一些可能是必需的,或者可能需要满足“3 个可能条件中的任何 2 个”标准。这些子状态或子条件可以以任何顺序得到满足。

  • 该过程可以动态修改,并且对于不同的组是不同的。即系统中存在多个组,每个组的用户可以指定过程中涉及哪些状态和子条件(某些组可以跳过某些状态和子条件)。我们需要以某种方式将流程存储在数据库中以促进这一点。

现在,我知道这是一组相当复杂的标准,所以我不希望有很多反馈。但我想知道是否有一些已发布的设计模式、技术或方法你们都知道来帮助实施这以一种优雅的方式。我和我的同事花了几个小时试图提出最佳解决方案,但我仍然觉得我们目前的解决方案太丑陋了。

如果您想要更多说明,请随时添加评论——这是一个很难描述的问题,所以如果我不够清楚,我不会感到惊讶。谢谢!

0 投票
1 回答
239 浏览

c# - 如何在有限状态机实现中与用户通信?

基本上我有一个自定义实现的有限状态机,它主要监听硬件开关状态变化以启动转换,但有些事情需要与用户沟通......

例如,用户需要告诉它是重复还是保存和重置。

我对如何做到这一点有一个很好的想法......当它到达那个点时我可以引发事件,然后 UI 层会询问用户然后触发转换,但是我有更好的方法或一些模式吗应该跟随?

只是寻找一些见解,所以我不会以错误的方式这样做。

我将其标记为社区 wiki,因为它不是真正的单一答案类型的问题。

0 投票
5 回答
3431 浏览

c++ - 状态机实现

我有一个如下所述的状态机。

我们可以从两个起始状态之一开始,但我们必须达到握手的所有 4 个状态。从那里,我们可以传输数据负载或接收数据负载。然后,我们回到原来的起始状态。

握手:

-> 起始状态 1 -> 最终状态 1 -> 起始状态 2 -> 最终状态 2

-> 起始状态 2 -> 最终状态 2 -> 起始状态 1 -> 最终状态 1

有效载荷转移:

-> SendPayload -> SendEnd -> StartingState?

-> ReceivePayload -> ReceiveEnd -> StartingState?

下面的代码代表了我当前的架构。不幸的是,在每个过程结束时,我没有足够的来自州内的信息来知道我应该达到的下一个州是什么。

有人对如何根据我的要求改进此架构有任何建议吗?

谢谢,保罗

0 投票
7 回答
7903 浏览

c++ - 有限状态机:糟糕的设计?

有限状态机通常被认为是 OOP 中的糟糕设计吗?

我经常听到。而且,在我不得不使用它来处理一个非常古老的、未记录的 C++ 片段之后,我倾向于同意。调试很痛苦。

可读性/可维护性问题呢?

0 投票
3 回答
3490 浏览

workflow-foundation - 什么时候你更喜欢使用状态机而不是线性工作流

当工作流必须对用户提供的答案“做出反应”时,当存在多个循环和分支或逻辑时,状态机可以降低工作流的复杂性。这将是一个事件驱动的工作流程。

您在什么情况下选择使用状态机,以及在时间和复杂性方面减少了哪种类型的痛苦?

0 投票
3 回答
1950 浏览

erlang - 如何可视化 Erlang gen_fsm

您是否知道任何现有的工具可以从源代码开始以图形方式呈现 Erlang gen_fsm 的图表?

0 投票
1 回答
10809 浏览

c# - 无状态(在谷歌代码上)和 Windows 工作流之间的比较

我开始认为我应该放弃 Windows WF 以支持更简单的东西。我不一定需要长时间暂停工作流执行并在以后恢复它们。但是,我想要一个简单的状态机框架,它确实具有基本的挂起/恢复/中止(没有序列化)。

我已经从 Google Code 下载了 Stateless 框架并准备开始使用它,但我很想听听其他 .NET 程序员正在使用什么。

编辑无状态似乎很容易实现,但我想知道它是否适合糖果机。在自动化方面,我总是对应该如何使用状态机感到矛盾。虽然我使用了“状态机”这个术语,但我之所以这么说是松散的,因为我使用它更像是一个流程图。我没有使用状态来表示机器所处的当前模式,而是使用它来执行功能。所以在这种无状态的情况下,我实际上会使用从一个状态到下一个状态的转换作为在我的糖果机控制器中调用函数的机制。想法?

0 投票
9 回答
17257 浏览

c - C中的状态机

用 C 编写状态机的最佳方法是什么?
我通常在 for(;;) 中编写一个大的 switch-case 语句,并带有回调以在外部操作完成时重新进入状态机。
你知道更有效的方法吗?

0 投票
1 回答
571 浏览

conditional-statements - 如何设计这个特定的有限状态机?

我试图弄清楚如何设计以下系统,我认为可以将其定义为有限状态机:

假设我们有一堆 16 个积木(塔楼、墙壁、大门)一起形成了一座城堡。玩家可以将积木拖到平面图上的 16 个位置,如果操作正确,他们将看到整个城堡。所有的塔(有四个)都是相等的,所以它们可以在四个角落中的任何一个上。一些墙壁也是如此。

总而言之,平面图上有 16 个点,您可以在其中放置一个积木,每个点可以有 17 个“状态”:空 + 16 个积木中的任何一个。做一些数学运算会导致 17^16=很多组合。

该程序从一个空的平面图和一堆积木开始。然后它应该显示一条消息,例如“建造你自己的城堡,从塔开始”。当用户正确放置一个塔时,它应该说“做得好,现在建造所有四个塔”。你明白了。

问题是:玩家可以做的事情太多了。在错误的地方放置一个块,移除一个块,正确地在平面图上放置墙壁或塔,忽略给他们的方向,等等。

如果我可以避免使用数千个 if-then 语句来决定我应该采取下一步、显示错误消息还是根据玩家正在做的事情返回上一步,那就太棒了。

您如何描述构建序列的每个步骤的 NEXT、PREVIOUS 和 ERROR 条件?有什么设计方法吗?非常感谢您的意见。

0 投票
2 回答
760 浏览

ruby-on-rails - before_filter 在 state_machine 中不起作用:(

我有一个依赖 state_machine 来管理其不同状态的模型。一个特定事件需要 before_transition,因为它需要构建一个连接表 fore 来进行转换。不幸的是,它不起作用。

现在,当我执行 DocumentSet.submit 时,它实际上从未进入 populate_join_table,因为它评估了 can_submit?作为假。

我错过了什么?