锁定老帖子 主题:struts和webwork双体验
精华帖 (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,这样的结构,可维护性提高了?生产效率高了?还是结构清晰了?这三点我都看不到好处。 |
|
返回顶楼 | |
发表时间: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的感觉是,为了使用它,多出了很多支支节节,实在有备“框架”的初衷。 |
|
返回顶楼 | |
发表时间:2004-11-21
这个你可以在ActionForm里增加一个
action字段,来根据不同的动作来判断 是否做验证..... |
|
返回顶楼 | |
发表时间: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。 你呢? |
|
返回顶楼 | |
发表时间:2004-11-22
我是尽量避免一个Action做多件事情的
我都很多 XXXAdd XXXRemove XXXUpdate .. ..等方法... 最多使用dispatchAction来作类试的操作... 尽量减少每个Action的代码的数量,我想命名合理就不会有太大的问题 |
|
返回顶楼 | |
发表时间:2004-11-22
JJYAO 写道 我是尽量避免一个Action做多件事情的
这样做我也做过,但是action数码太多了,而且有的action过于简单,干活的代码就两句,其他的代码几十行,而且各个action之间的代码那么类似,重复代码也太多了。
我都很多 XXXAdd XXXRemove XXXUpdate .. ..等方法... 最多使用dispatchAction来作类试的操作... 尽量减少每个Action的代码的数量,我想命名合理就不会有太大的问题 拆了东墙补西墙。 ![]() |
|
返回顶楼 | |
发表时间:2004-12-25
刚开始的时候觉得jsp+js+servlet+javabean+dao+vo的方式开发快的不得了,到了后面模块多了,需求变了,哭的不得了.^^
|
|
返回顶楼 | |
发表时间:2004-12-30
jsp+js+servlet+javabean+dao+vo
好比小米加步枪 |
|
返回顶楼 | |
发表时间:2005-01-16
gigix 写道 我最看重的是:Struts的接口到处都是Http....和Servlet...,你怎么测试它?如果不能测试它,你怎么敢在里面放更多的业务逻辑?WebWork的可测试性,不是Struts能比的。
虽然我也不用struts,但是我对于这样的说法实在难以认同!你写个测试用例,ant一下,那就是测试了??能通过这样的东西测试出什么来?测试用例是死的,但是人是活的。 |
|
返回顶楼 | |
发表时间:2005-01-16
sunsonbaby 写道 刚开始的时候觉得jsp+js+servlet+javabean+dao+vo的方式开发快的不得了,到了后面模块多了,需求变了,哭的不得了.^^
请问你用什么办法不哭的呢? 我做的系统就是这样。servlet根据url,自己调用相应的方法,每个servelt根据 业务流程包含6-10个左右的方法这样的servlet有1k个,我如果改成struts, validate我得写多少?formbean我得写多少?action我得用多少? 你试试最后哭得是哪一个。 |
|
返回顶楼 | |