使用一个状态机来保护另一个状态机

本文关键字:状态机 保护 另一个 一个 | 更新日期: 2023-09-27 18:05:39

我正在设计一个模拟组织中文档流程的系统。为简单起见,我们假设流具有以下状态:

    打开
  • 拒绝

有时需要一些外部资源才能继续进行。因此,如果一个资源不可用,整个流应该被搁置。我想象有另一个(以某种方式)具有两种状态的并行状态机:

  • 正在进行

我认为我可以解决这个问题的方法是在第一个状态机的每次转换中检查第二个状态机的状态作为保护条件。但我想知道是否有一个共同的方法或模式来解决这类问题?

顺便说一句,我想使用无状态或bbv Common(appaccelerate)库来实现这个状态机。

使用一个状态机来保护另一个状态机

使用UML状态机,您可以将分层状态与历史状态一起使用。

  • 在进步
      打开
    • 拒绝
    • (H)历史状态

'In Progress'子状态的事件只有在'In Progress'和它的一个子状态是活动的情况下才会被处理。

(H)历史状态可用于在'In Progress'变为活动状态时重新激活最近活动的子状态。

根据我使用状态机的经验,我认为您最好只使用一个状态机。将On Hold设置为一种状态,并让其他状态在它们的检查条件中检查所需的外部资源是否可用,如果没有,则将文档移动到On Hold状态。

至于正在进行的状态,我认为这是由其他状态暗示的,并不是真正必要的。

由:

  • CheckConditions,这是你放置守卫条件的地方
  • ExitConditions
  • EntryConditions