论坛首页 Java企业应用论坛

看了Ruby on Rails后对struts开刀的想法。

浏览 3658 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2005-09-09  
ROR的飓风也吹到了我,我们开发团队mvc一直是用struts, 受它的影响,我准备用它的 convention over configuration  之风清洗一下我们的struts使用,顺便把CRUD通用业务操作也完作起来,重复的工作让它最简,且保留扩展点。在看ROR的帖子时顺便扫到了"那个人"(有人说它被透明PK掉了)的Jdonframework,也借鉴了一些思路。
      下来我把基本的思路描述一下:
     ROR用约定的url格式+反射简化了大量配置xml内容,如下:
     http://localhost/app/user/view/3,明显,前缀user代表DomainObject,后面的view代表业务方法,最后为id参数.
      我的设想是,在struts中,我也采用这种粗粒度的Action设计,即DispatchAction,略加改造,采用ROR的这种映射规则,我将重载ActionServlet(只重载RequestProcessor类就可以了),使其默认的根据Path寻找action的规则变成:首先全路径查找,如果找不着,使用前缀查找,,如:
http://localhost:8080/app/user/view.do?id=3,
首先会根据/user/view在struts-config.xml中查,若查不到,再用/user查。这样作的目的是:一个UserAction假如有CRUD等方法,还是要配置两处的,因为涉及表单的ActionMapping得有input节点和name(action form),而只读操作并不需要这些。

接下来,我们扩展一下DispatchAction,预制view、delete、edit这几个常用方法,抽取其共同流程(按约定),并留出扩展点,url中的后缀,即view就可以是Action中的方法了,个人觉得这样比多配一个paramter="method"属性,然后url成为 http://localhost:8080/app/user.do?method=view&id=1 要简洁易懂。

由于我们是采用spring+hibernate+struts的,并不能完全的DDD,所以,在action中根据前缀定位到Manager的实例,来方便一些通用的CRUD操作。

在传统的struts-config.xml中有很多看起来冗余的配置项,例如:
<action type="xxx" input="/edit/xxx.jsp">
    <forward name="success" path="/edit/xxx.jsp"/>
</action>
红色的forward一般情况下就是一个多余配置。

稍微复杂一点的是edit动作,它隐藏了readyAdd、
readEdit、insert、update这几个变数,完全用url中的参数或表单中用于过渡的令牌字来判断,保存操作涉及一个manyToOne属性的问题。我会在我的domain包中建一个RelationshipMapping类和一个单例的RelationshipMappingRegistry类,来辅助处理它。

有点乱,待续一下,想和大家讨论。
   发表时间:2005-09-27  
事实上是,风不知道从哪里开始吹的。楼主所说的想法在很早的web应用程序已经应用了。
0 请登录后投票
论坛首页 Java企业应用版

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