public void configure(StateMachineTransitionConfigurer<States, Events> transitions)
throws Exception {
transitions
.withExternal()
.source(States.SI).target(States.S1)
.event(Events.E1)
.guard(guard1())
.and()
.withExternal()
.source(States.S1).target(States.S2)
.event(Events.E1)
.guard(guard2())
.and()
.withExternal()
.source(States.S2).target(States.S3)
.event(Events.E2)
.guardExpression("extendedState.variables.get('myvar')");
}
如果状态机处于状态States.S1
并且我发送事件Events.E1
,我怎么知道是否guard2()
拒绝了转换?
我目前正在检查状态机的状态:如果它还在,States.S1
那么我知道该事件被拒绝了。这是处理警卫拒绝的“正确”方式吗?
编辑:
在阅读了 Janne 的评论后,我意识到我正在尝试做的可能是对警卫的错误使用。似乎应该只使用守卫来确定机器应该转换到哪个状态,而不是是否应该进入一个状态。如果是后者,即转换被彻底拒绝,那么状态机将处于无状态。我应该知道代码允许我做什么,以及在编写工作流时具有以状态机为中心的心态。这就是我在假期前匆匆忙忙的结果!