浏览 3659 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2005-09-09
下来我把基本的思路描述一下: 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类,来辅助处理它。 有点乱,待续一下,想和大家讨论。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2005-09-27
事实上是,风不知道从哪里开始吹的。楼主所说的想法在很早的web应用程序已经应用了。
|
|
返回顶楼 | |