让状态机作为另一个状态机的守卫

时间:2014-05-29 10:19:55

标签: c# state-machine

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

  • 开放
  • 评估
  • 拒绝
  • 接受

有时需要一些外部资源才能继续。因此,如果资源不可用,则应保持整个流程。我想是另一个(某种程度上)并行状态机有两种状态:

  • 正在进行中
  • 暂停

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

顺便说一句,我想使用Statelessbbv Common(Appccelerate)库来实现这种状态机。

2 个答案:

答案 0 :(得分:1)

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

  • 正在进行中
    • 开放
    • 评估的
    • 拒绝
    • 接受
    • (H)历史状态
  • 暂停

“进行中”子状态的事件仅在“正在进行”且其中一个子状态处于活动状态时才会被处理。

当“进行中”变为活动状态时,(H)历史状态可用于重新激活最近活动的子状态。

答案 1 :(得分:0)

根据我对状态机的经验,我认为只使用一台状态机你会更好。使“保持”状态并让其他状态检查其检查条件是否所需的外部资源可用,如果不可用则将文档移动到“保持”状态。

至于正在进行中的状态,我认为这是其他州隐含的,并非真正必要。

国家组成:

  • CheckConditions,这是你提出保护条件的地方
  • ExitConditions
  • EntryConditions