论坛首页 Java企业应用论坛

struts和webwork双体验

浏览 55620 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2004-11-21  
引用
<action path="/action1"
type="action1">
<forward name="success"path="go.jsp></forward>
</action>

<action path="/action2"
type="action2">
<forward name="success"path="/action1.do"></forward>
</action>

<action path="/action3"
type="action3">
<forward name="success"path="/action1.do"></forward>
</action>


你说的这个方法,可以解决诸多action中代码重复的问题,就是把重复的代码写入同一个action中,作为公因数提取出来一样。这样可行。但是这样做只是一个绕道走的方法,也就是说为了迁就struts,发明了一层action,这一层action的用途就是构建view层所需要的数据。

如果是你自己设计结构会这么分层吗?显然这一层是由于使用struts之后带来的附属物,看看struts的例程,也不是这么做的,当然这么做的好处就是减少了重复代码量,缺点就是破坏的action的原始意义,并增加的了action的数目。

这么做之后,对比一下jsp+Service,这样的结构,可维护性提高了?生产效率高了?还是结构清晰了?这三点我都看不到好处。
0 请登录后投票
   发表时间:2004-11-21  
关于validater的那段,是我没说很清楚,我举例说明一下,比如我写了一个action用来控制一个user的CRUD(create, read, update, delete)
通过userAction.do?type=add或者userAction.do?type=update之类的实现操作。当我对一个user对象upate的时候,情况是这样的:

我有一个userAction,里面实现了对user的CRUD操作,它对应一个userFormBean,这个formbeam中的validater函数,验证了各个formbean中的各个字段的有效性。

当我add一个user的时候,这样的设置是非常好的,--所有的例子都是用这个来演示,关键之处在于,当访问action之前,必须构建formbean。但是如果执行update user操作时,情况就不同了,因为我直接通过userAction?type=update达到update界面,struts是如何工作的呢?它在执行userAction之前会构建对应的formbean,于add动作不同的是,add动作是由一个带有form的表单,submit到userAction;update则不是,当我的请求发送到userAction?type=update后,struts首先是构建一个空的formbean对象并执行其中的validate方法,通过验证后才填充action的form参数,才执行action方法,而构建的空的formbean自然是不能满足validator的,此时停止构建action,直接返回到input属性的错误页面。

当然我也可以找到workaround(绕道走的方法),比如js在客户端验证,或者把验证代码写到action里面不写到formbean的validater里面,这样还是在迁就struts,迁就就迁就,也没什么大不料的。

框架是什么,对固有流程的萃取,而用struts的感觉是,为了使用它,多出了很多支支节节,实在有备“框架”的初衷。
0 请登录后投票
   发表时间:2004-11-21  
这个你可以在ActionForm里增加一个
action字段,来根据不同的动作来判断
是否做验证.....
0 请登录后投票
   发表时间:2004-11-22  
JJYAO 写道
这个你可以在ActionForm里增加一个
action字段,来根据不同的动作来判断
是否做验证.....


是的,你说的这个方法也可以,我现在的做法是验证都放在js里面了。
但是不觉的formbean已经脱离原意了吗。
struts已经出现这么久了,已经有那么多项目用它了,所有的问题都可以绕开。
只是你愿不愿意的问题,这些问题都是struts带给我的,不是project和product功能需求带给我的。

readonly说是擦屁股,粗俗的解释就是struts拉了一些XX,而我们在不断的找出各种workaround来擦它的屁股。

另,请教一下,你怎么处理,一个action对应多个表示层传递过来的对象数据的问题?就是我希望action可以处理多个formbean,怎么办?
我的方法很土,两种:
1。把所有的属性都塞进那一个formbean。
2。不用formbean,用request。getParameter。然后自己弄一个ReqUtils来转成dataModel。

你呢?
0 请登录后投票
   发表时间:2004-11-22  
我是尽量避免一个Action做多件事情的
我都很多
XXXAdd
XXXRemove
XXXUpdate
..
..等方法... 最多使用dispatchAction来作类试的操作...

尽量减少每个Action的代码的数量,我想命名合理就不会有太大的问题
0 请登录后投票
   发表时间:2004-11-22  
JJYAO 写道
我是尽量避免一个Action做多件事情的
我都很多
XXXAdd
XXXRemove
XXXUpdate
..
..等方法... 最多使用dispatchAction来作类试的操作...

尽量减少每个Action的代码的数量,我想命名合理就不会有太大的问题
这样做我也做过,但是action数码太多了,而且有的action过于简单,干活的代码就两句,其他的代码几十行,而且各个action之间的代码那么类似,重复代码也太多了。

拆了东墙补西墙。
0 请登录后投票
   发表时间:2004-12-25  
刚开始的时候觉得jsp+js+servlet+javabean+dao+vo的方式开发快的不得了,到了后面模块多了,需求变了,哭的不得了.^^
0 请登录后投票
   发表时间:2004-12-30  
jsp+js+servlet+javabean+dao+vo
好比小米加步枪
0 请登录后投票
   发表时间:2005-01-16  
gigix 写道
我最看重的是:Struts的接口到处都是Http....和Servlet...,你怎么测试它?如果不能测试它,你怎么敢在里面放更多的业务逻辑?WebWork的可测试性,不是Struts能比的。

虽然我也不用struts,但是我对于这样的说法实在难以认同!你写个测试用例,ant一下,那就是测试了??能通过这样的东西测试出什么来?测试用例是死的,但是人是活的。
0 请登录后投票
   发表时间:2005-01-16  
sunsonbaby 写道
刚开始的时候觉得jsp+js+servlet+javabean+dao+vo的方式开发快的不得了,到了后面模块多了,需求变了,哭的不得了.^^

请问你用什么办法不哭的呢?
我做的系统就是这样。servlet根据url,自己调用相应的方法,每个servelt根据
业务流程包含6-10个左右的方法这样的servlet有1k个,我如果改成struts,
validate我得写多少?formbean我得写多少?action我得用多少?
你试试最后哭得是哪一个。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics