(1) 所有web请求的参数的解析和验证,可以使用统一的ValidateService去做,每个方法和controller的每个方法一一对应,正确时返回解析后的输入参数,错误时抛出异常,带上错误原因的信息,如:
public User login(User user) {
//验证用户名和密码的合法性
if (user == null || StringUtils.isBlank(user.getUsername())
|| !validateUsername(user.getUsername()) || StringUtils.isBlank(user.getPassword())
|| !validatePassword(user.getPassword())) {//用户名或密码不合法!
String errorMessage = messageSource.getMessage(
"username.or.password.not.allow.key", null, LocaleContextHolder
.getLocale());
throw new ValidateException(errorMessage);
}
return user;
}
也可以使用《validation language 》 去验证。
(2) 每个controller方法,都需要有2种结果:error,success
(3) xml文件的校验,使用xsd
(4) 操作数据库,注意对符合这2个条件的添加事务
1. save和update,delete;
2.同时操作2个表以上,或者对一个表处理2个记录以上(批处理);
(5) sql语句, Where语句参数为空时不能误操作。
对update,delete不能写(对于query则可以这样使用动态where):
<dynamic prepend="WHERE"> <isGreaterThan compareValue="0" prepend="and" property="id"> ID = #id# </isGreaterThan> </dynamic>
而应该:
WHERE ID = #id#
(6) 检查程序中哪些地方是需要同步的(web本身就是多线程,所以controller,filter,servlet,service本身设计上已经考虑到),例如一个有状态的对象被多线程访问,考虑使用syncronized或并发包的集合对象;
(7) 创建一个完整的web.xml,创建404页面和500页面;
(8) 单元测试:
传统是JUnit,可以执行run的单元测试;
对于web,常常需要容器才能run单元测试,因此有了testNG和play的JUint。
testNG可以结合Spring自动载入bean然后再run,还可以结合mvn使用mvn test跑测试,数据库测试的mork可以使用DbFit,DbFit使用wiki文件mork数据。
play的JUnit更加强大,与框架集合在一起,使用play test命令,可以在web页面跑单元测试,数据库的mork使用YAML。