论坛首页 入门技术论坛

经验不足,差一点重构整个系统

浏览 4130 次
精华帖 (0) :: 良好帖 (15) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-12-30  
 

呵呵,很久没有来JavaEye写文章了,公司工作也不让随便上网,也好,工作中发现了不少问题和大家分享吧。

1. 郁闷的Form表单问题,请看下面代码:

xml 代码
  1. <form name="form1" action="userCRUDAction!editUser.action?user.id=${user.id}">  

 

这真已经是一个再简单不过的Struts2的表单提交了,不过运行后,你会发现user.id=null。 为什么? 你现在试试把代码换成以下就好了。

xml 代码
  1. <form name="form1" action="userCRUDAction!editUser.action?user.id=${user.id}" method="post">  

或者:

xml 代码
  1. <form name="form1" action="userCRUDAction!editUser.action">
  2.     <input type="hidden" name="user.id" value="${user.id}" />  

原因看出来了吧,重点就是这个 method="post",  Form默认的传输是GET,你得养成好习惯记得在每写一个FORM的时候,就给加上。

 

2. 吓出一身冷汗的Spring scope问题。

天天Struts2,Webwork,Spring,Hibernate挂在嘴边,结果一用的时候才真正明白,真正懂这几个框架的人真的非常非常少。更别去谈成功的项目了。

以下代码在任何SSH框架的项目里是太平常的我都不愿意写了:

java 代码
  1. public class UserController extends ActionSupport {   
  2.   
  3.     private static final long serialVersionUID = 1L;   
  4.   
  5.     private static Logger logger = Logger.getLogger(BaseController.class);   
  6.   
  7.     private IUserService userService;  
  8.   
  9.     private User user;
  10.     private Date createDate;
  11.  
  12.     ..................

然后把 userService 注入:

 

 

xml 代码
  1. <bean id="userCRUD" class="com.libe.controller.UserController">  
  2.     <property name="userService" ref="userService" />  
  3. </bean>  

 代码单元测试也通过了,社会和谐了,呵呵。可是一放到服务器上,开始出莫名奇妙的问题了,测试人员不停的提交那些根本不可能出现的问题,好吧。开断点,看着断点也吓出一身冷汗:许多本应该为null的对象,竟然都有值了!@##¥%。

代码查了又查看了又看,终于又回到这个XML配置片断了,修改成如下:

xml 代码
  1. <bean id="userCRUD" class="com.libe.controller.UserController"  
  2.     scope="prototype">  
  3.     <property name="userService" ref="userService" />  
  4. </bean>  

就是加了一个 scope="prototype"。 然后回头看看项目,几十个Action竟然都没有加,汗,测试员提出的问题应该和这个有关,大家都知道Spring的默认设置为:singleton,Spring的容器只维护该类的一个实例感觉应该和启动后,Tocmat加载的Servlet挺相似。如果这个时候Action设置成了singleton,大家可以试着想像一下在那个Action里的 user, createDate,等等其它私有属性在那几个测试员的交差点击下,会出现多么混乱的情况。

3.Hibernate的滥用:

我一直承认自己的Hibernate用的不好,所以更多的时候是在测试,以达到最佳实践。从最开始对Hibernate的疯狂吹捧,再到将Hibernate项目转成JDBC项目之痛,到现在反复看文档做测试尽可能客观的来对待Hibernate,已经有一年多了。

我这个项目其实根本不适合使用Hibernate

1.从一开始就不是按照对象建模再建表,对象建立都是跟表走。

2.表结构冗余非常严重,一般通过关联取的信息已经在主控表里了。

3.用着最新的Hibernate却当Hibernate2.1使用,那些什么lazy, cache, proxy, out-join全部都不管,这也是让我最郁闷的一点,lazy=false,你就等着Hibernate给你刷屏吧。

想改变这一切,可是我来的有点晚,项目已经做了一大半了,要全部设计的话似乎已经不可能了。

   发表时间:2007-12-31  
呵呵,你们公司用Struts2.0吗?
0 请登录后投票
   发表时间:2008-01-01  
不是,是Webwork2,应该就是包名不一样。
0 请登录后投票
   发表时间:2008-01-08  
呵,呵,也有同感啊.
0 请登录后投票
   发表时间:2008-01-23  
局部User对象不就好了吗
0 请登录后投票
   发表时间:2008-09-18  
感觉你的文章都不错
0 请登录后投票
   发表时间:2008-09-19  
楼主要重写系统架构,不是小步重构的问题啊
0 请登录后投票
   发表时间:2008-09-25  
第2点的确很容易出错。
0 请登录后投票
   发表时间:2008-09-25  
看来,用架构之前应该先搞透
0 请登录后投票
   发表时间:2008-10-06  
呵呵 好久没研究WEB SSH里的东西了,亲切又陌生
0 请登录后投票
论坛首页 入门技术版

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