gpt4 book ai didi

java - 在 View 状态和操作状态下评估标签有什么区别

转载 作者:行者123 更新时间:2023-12-01 11:36:17 26 4
gpt4 key购买 nike

我想通过调用函数并在流范围中设置一些变量来实现到另一个 View 的转换。成功或错误事件没有区别。我知道,我可以在 View 状态和操作状态下使用评估标签来调用函数。在每个标签中添加评估标签有什么区别吗?对于这种情况,哪一个更好?

最佳答案

WebFlow 是灵活的,您可以通过“on-entry”和“on-exit”标签或在操作状态标签中在任何状态下执行评估表达式。与任何允许灵 active 的框架一样,最好选择在所有流程中保持一致的策略。您可以简单地在“view-state”内的“on-entry”或“on-render”标记内执行评估表达式,但使用中间“action-state”首先在那里执行表达式然后转换到“ View 状态”。

优点:

有时您必须计算多个表达式,但它们都是同一“操作”的一部分。将这些多个评估分组为“ Action 状态”,并为“ Action 状态”提供有意义的 ID 名称,有助于提高流程可读性,并有助于在该 Action 状态中抛出异常时排除潜在的故障。

例如,

假设我们在渲染“ View 状态”之前必须调用 3 个不同的服务方法。我们可以这样做:

<view-state id="myViewState" view="myViewFile" model="entity">
<on-entry>
<evaluate expression="myService.findObjById(id)" result="flowScope.model" />
<evaluate expression="myService.updateUserStats(someField)"/>
<evaluate expression="myService.performSomeOtherAction()"/>
</on-entry>

</view-state>

这会工作得很好,但如果我们从“on-entry”中删除所有这些服务方法调用,并在执行完成后将它们置于自己的“action-state”中,然后转换到“view-state”,那就更好了'

<action-state id="prepareMyViewState">
<evaluate expression="myService.findObjById(id)" result="flowScope.model" />
<evaluate expression="myService.updateUserStats(someField)"/>
<evaluate expression="myService.performSomeOtherAction()"/>
<transition to="myViewState"/>
</action>

<view-state id="myViewState" view="myViewFile" model="entity">

</view-state>

这两个示例都是“正确的”,但是具有操作状态的示例更加冗长并且清楚地定义了关注点的分离。因此,如果在操作状态“prepareMyViewState”中抛出异常,我们可以从名称中确切地知道该操作状态的作用,而不是 View 状态“myViewState”抛出异常,该异常可能与准备或操作相关。 View 状态的渲染。此外,将来如果您想要添加/编辑/删除服务调用,当它们被放置在自己的操作状态中并具有有意义的名称“prepareMyViewState”时,您可以轻松地在流文件中找到它。

我再次强调,这里没有错误的答案,我只想说选择一种在整个网络流应用程序中保持一致的“风格”。我将使用第二种带有中间 Action 状态的样式。

关于java - 在 View 状态和操作状态下评估标签有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29960151/

26 4 0