[]
Martin.guo
J2ee
架构中一般都要考虑
Web Framework
的选择。很多人选择比较流行的
Struts
。项目组中遇到过这样的情况,有些人不熟悉
Struts
,而有些人又对
Struts
青睐有加。有没有一个折中的办法来满足所有的人呢?
我是这样设计的:
通过拦截提交到
ActionServlet
上的
http
请求,经过
Http Parse
来收集请求参数,以
Name-Value
的形式存放为请求值对象,并且放在请求线程相关的上下文中。这个时候你就可以在
Action
执行结束前的任何地方拿到这些请求数据了。
在这个基础上,我们保留了
Struts
的
Action
,并且规定
Action
的
execute
方法里不能出现任何跟业务相关的代码
,
仅仅是负责页面的流转。
那么业务怎么办呢?我们定义了一个接口
Command,
它也只有一个方法
,
我们也取名字为
execute,
并且没有任何参数和返回数值。该方法的职责就是执行业务逻辑。这个时候你就要问了。
Action
里抽离业务逻辑,怎么调用
Command
呢?请求提交的数据怎么给
Command
呢
?Command
执行完后的业务数据怎么返回?
我们设计了一个业务执行器,它的功能就是执行
Command
的业务逻辑实现
.
而把执行器的执行写到了
Action
里面。这样就隔离了页面流转和业务执行。
Action
的代码显的很简练和模板化。
由于请求数据是放在请求线程相关的上下文中,所以可以很方便的拿到。同时
Command
执行完毕的返回数据也是通过这个上下文返回给
Action
或者其他跟此请求线程相关的组件,说白一点就是此线程能够跑到的任何代码处都可以去跟上下文交互,存取线程相关的数据和服务。
设计到此为止,已经可以回答开头的问题了。
对于熟悉
Struts
的人呢,可以积极放心的使用
Struts
标签,使用
Formbean,
但有一点就是自己要把
FormBean
放到线程相关的上下文中,这样你就可以在
Command
里面去拿出来工作了,同时
Command
执行完毕后,你就可以顺手把返回数据填充到这个
FormBean
里面去了。跟你平时使用没有太大区别。
而对于不熟悉的人呢,你可能不喜欢写
Struts
标签,也可能不喜欢死板的
Formbean,
那么
OK
,你完全不用关心这些,你只要直接在
Command
里面去写逻辑代码就可以了。但有一点就是要,你要手工把返回的数据集合放到
request
里面去,然后到流转的
JSP
里面取出来展示。
OK
,皆大欢喜。
msn:gdq123@hotmail.com