3

我在参考文档中配置了转换:

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 的评论后,我意识到我正在尝试做的可能是对警卫的错误使用。似乎应该只使用守卫来确定机器应该转换到哪个状态,而不是是否应该进入一个状态。如果是后者,即转换被彻底拒绝,那么状态机将处于无状态。我应该知道代码允许我做什么,以及在编写工作流时具有以状态机为中心的心态。这就是我在假期前匆匆忙忙的结果!

4

0 回答 0