但是,状态机(state machine)是不错的延续方式。状态机是一种定义了状态之间的转换的程序。到目前为止,具有延续服务器特征的最流行的 Java 框架是 Spring 的 Web Flow。Web Flow 采用状态机形式对用户界面页面之间的导航进行建模。Web Flow 可以将程序流建模成 Java 对象,但是常常使用 XML 来描述程序流。请考虑清单 3 中来自 Web Flow 教程(参见 参考资料)的程序流表示:
清单 3. Web Flow 程序流表示
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE webflow PUBLIC "-//SPRING//DTD WEBFLOW//EN"
"http://www.springframework.org/dtd/spring-webflow.dtd">
<webflow id="myFlow" start-state="displayForm">
<view-state id="displayForm" view="form">
<entry>
<action bean="myFlowAction" method="setupForm"/>
</entry>
<transition on="submit" to="processSubmit">
<action bean="myFlowAction" method="bindAndValidate"/>
</transition>
</view-state>
<action-state id="processSubmit">
<action bean="myFlowAction"/>
<transition on="success" to="finish"/>
</action-state>
<end-state id="finish" view="success"/>
</webflow>
这个流程有三个核心状态:displayForm、processSubmit 和 finish。这个程序流定义了使机器从一个状态转换到下一个状态的动作。例如,submit 将状态从 displayForm 转换到 processSubmit。Web Flow 在典型的模型-视图-控制器级别上操作。可以使用许多不同的视图技术来显示表单。
当从一个状态转换到下一个状态时,框架自动捕获当前状态,包括所有实例变量。这样就可以获得与其他延续服务器一样的 Back 按钮支持和有状态编程模型。这种方式不使用本机延续,但是具有延续服务器的许多优点,还有其他一些优点:
持久性。 尽管不能捕获整个调用堆栈,但是可以捕获当前执行状态,甚至可以持久存储当前状态。
长期存活的程序流,比如工作流。 因为状态不依赖于给定的调用堆栈,所以这种方式对于长期工作流这样的东西更稳定。
工具。 很容易为 XML 构建工具。
文章来源于领测软件测试网 https://www.ltesting.net/