春季 Webflow - 决策状态与操作状态

2022-09-02 20:00:10

我正在使用Spring WebFlow 2,我想知道决策状态与操作状态的差异。

我正在阅读,不了解决策状态与行动状态的差异。我知道视图状态将显示一个jsp用于输入,但是决策状态与操作状态的差异是什么?

为什么我应该使用决策状态而不是操作状态?为什么我应该使用操作状态而不是决策状态?

有人可以对此拍摄一些光吗?


答案 1

通常,专门用于布尔条件。它更清楚,更简洁地说明了它发生了什么。decision-state

例如

<decision-state id="myDecisionState">
    <if test="myBooleanFunction()" then="resultIsTrueState" else="resultIsFalseState" />
</decision-state>

这可以像这样复制:action-state

<action-state id="myActionState">
    <evaluate expression="myBooleanFunction()" />
    <transition on="yes" to="resultIsTrueState" />
    <transition on="no" to="resultIsFalseState" />
</action-state>

但是,不同之处在于,它不只是对布尔值进行操作 - 它可以触发 上的转换,而任何其他结果都被视为 .action-stateString (string value)Boolean (yes/no)Enum (enum name)success

因此,与实际上必须决定某些事情的a相反,an可以简单地用于执行一些代码。decision-stateaction-state

<action-state id="myActionState">
    <evaluate expression="myFunction()" />
    <transition on="success" to="myNextState" />
</action-state>

我希望这能清除一些东西。


答案 2

1. 令人困惑的情况

在Webflow中,在某些情况下,<决策状态>可以以类似于<操作状态>的方式使用。文档显示以下两个表达式是可互换的。

<action-state id=“moreAnswersRequired”>
<evaluate expression=“interview.moreAnswersRequired()” />
<transition on=“yes” to=“answerQuestions” />
<transition on=“no” to=“finish” />
</action-state>

和:

<decision-state id=“moreAnswersRequired”>
<if test=“interview.moreAnswersRequired()” then=“answerQuestions” else=“finish” />
</decision-state>

2. 何时使用什么?

鉴于<决策状态>只能处理<行动状态>处理的子集 - 我们在考虑两个候选人时应该从前者开始。

  1. <决策状态>旨在用于 if-else 路由,作为<操作状态>的替代方法。它作为关于漫游的二元决策。如果可以应用 - 应该使用它。
  2. <操作状态>允许处理更复杂的逻辑。您可以处理异常,可以在不使它们成为条件的情况下执行表达式,并且可以处理比前一个更多的情况。

希望这有帮助。


推荐