UML软件工程组织

Spring WebFlow:重用与抽象框架解析之二
来 源: Java研究组织
重用

WebFlow中的流程定义,如登录流程,有针对性地被结构化以便重用。他们定义封装了自己的生命周期。这些定义可以很容易的用支持Spring的其他Web组件配置重用。架构师应该识别出并定义通用的 流程,如登录,搜索等以便今后的重用。

此外,Action如果正确的设计与Spring的结合,也可以被重用。他们可以同时被不同流程的action state使用。这些重用,既有应用级的又有流程级的,增强了维护性和代码可读性。

与Struts结合

WebFlow与struts的结合部分地通过标准的Spring类和org.springframework.web.struts包中的一些配置。要与WebFlow相关概念(Action,ActionFlow)结合只需要注册WebFlow规格的struts action,并像普通的WebFlow action一样使用。

下面的配置代码来自struts-config.xml,描述了Struts的Action如何配置成流程的入口。注意WebFlow规格的Action类(org.springframework.web.flow.struts.FlowAction)和属性"flowId",它们将Action与登陆流程连接起来。例子中的登录流程在Spring的应用上下文(ApplicationContext)中作为一个loginFlow的bean管理。你还需要将这个流程注册为一个由Spring管理的bean。


<!- flow actions ->
            <action path="/loginFlow"
 type="org.springframework.web
 .flow.struts.FlowAction"
  name="actionForm" scope="request" 
className="org.springframework.web.
flow.struts.FlowActionMapping">
<set-property property="flowId"
value="loginAction" />
            </action>


在这个例子中还用到了Spring中的RequestProcessor(org.springframework.web.struts.BindingRequestProcessor),是Spring的自动绑定form和bean。这一特性避免再去写单独的ActionForm对象。


<controller processorClass="org.springframework.web.
struts.BindingRequestProcessor"/>

同时,它还要求一个使用工具类来自动绑定Web表单中的值到一个对象。


<plug-in className="org.springframework.
web.struts.BindingPlugin"/>


WebFlow的预发布现在可以下载,其中包含一个样例应用("birthdate"),详细描述了这个整合过程。

如果你正在着手建立一个Web应用,Spring是一个非常不错的选择。Spring MVC非常容易上手并且可以很方便的同其他组件整合。另一方面,即将出现的Spring WebFlow将提供给你各种复杂的新特性。使你能够开发出高度重用和结构化的Web应用。如果你在开发的是一个大规模的企业应用,这一点是很重要的。这也是为什么struts如此流行。

总的来说,J2EE Web框架目前处在一种群雄逐鹿的状态,没有一个领导者。Struts是最流行的,但是它的主架构师也是主要的开发者已经抛弃了它。被称为Struts取代者的JSF目前还没有获得足够的影响力。而同时,其他的框架正在慢慢开始流行。

你也许会问,"我应该选择哪个?"Spring WebFlow出现可以让你以后再去考虑这个问题。WebFlow允许你在不需要较大改动的情况下方便的切换框架。

像前面说过的,Spring WebFlow是一个抽象的框架,可以让你只专注于业务流程和重用。无论是Struts,JSF还是Spring MVC都可以作为它的业务流程实现。因此,你也就不需要马上作出上面说的那个选择了。

 

版权所有:UML软件工程组织