gpt4 book ai didi

state-machine - Spring 状态机 : Action on choice state transition not possible?

转载 作者:行者123 更新时间:2023-12-04 05:36:30 26 4
gpt4 key购买 nike

添加到选择伪状态的 Action 似乎被默默地忽略了。这样做:

Builder builder = StateMachineBuilder.builder();
StateConfigurer states = builder.configureStates().withStates();
StateMachineTransitionConfigurer transitions = builder.configureTransitions();
StateConfigurer statesConfig = states.initial(INITIAL).states(EnumSet.allOf(StateType.class));
statesConfig.choice(StateType.CHOICE_STATE);

transitions.withChoice().source(StateType.CHOICE_STATE). //
first(StateType.S1, someGuard). //
last(StateType.S2);

states.state(StateType.CHOICE_STATE, someAction, null);

导致在输入 CHOICE_STATE 时永远不会执行 someAction。

框架不允许向 CHOICE_STATE 之外的转换添加操作(例如,到上面的 S1 或 S2)。

为了解决这个问题,我们在 CHOICE_STATE 之前实现了一个状态。然后我们可以像往常一样自由地向这个状态添加 Action 。我只是想知道这种限制的原因是什么,或者是否有某种方法可以将操作置于我可能错过的伪状态。

最佳答案

那是因为选择是一个伪状态,它应该是 transient 的,所以在那个状态本身不应该有行为改变。

您是否尝试过定义Action 并带有一个Transition,让您进入选择状态?

@Override
public void configure(StateMachineTransitionConfigurer<TestStates, TestEvents> transitions) throws Exception {
transitions
.withExternal()
.source(TestStates.S1)
.target(TestStates.S2)
.event(TestEvents.E2)
.action(externalTestAction());
}


@Bean
public Action<TestStates, TestEvents> externalTestAction() {
return new TestAction();
}

前置状态是一个很好的解决方法,尤其是伴随着无触发转换的状态

我可以尝试看看在 Spring Statemachine 中我们是否可以将功能添加到转换(选择转换的配置器)本身。我为此创建了一张票 https://github.com/spring-projects/spring-statemachine/issues/108 .

虽然我们主要尝试遵循 UML 模型,但规范在大多数部分都非常模糊,并且将许多实现细节留给实现本身。

关于state-machine - Spring 状态机 : Action on choice state transition not possible?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32482178/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com