一、后端代码规范
1、Controller层开始必须为权限判断(尤其是编辑和新增);
2、Controller层不出现 try...cache...,只出现 throw new XXXException(code); 统一处理;
3、getList的请求建议封装Condation对象,而不是一个个变量;
4、有数据修改的,必须 method=post;user、company信息建议在manager层处理;
5、Manager层是事务层,对于一些不能分割的操作放在该层的方法中,不可分割的业务逻辑不应该出现在Controller中;
6、Service层只是比Dao层多一个cache(也就是说将来我们的cache添加到Service层),添加cache后,Service从Dao中获取到List<id>,for 遍历再从Dao中取domain封装成List<Domain>;
7、添加cache后,从cache中取出的对象不允许被直接使用,而应提供BeanUtils.copyProperties;
8、user、company 不允许从页面传递过来;【从session中获取userId,根据userId获取User对象,根据User对象的cId获取Company对象】
9、getCurrentUser() 之类的方法(从session中获取uid,再获取User对象)不允许出现在manager、service、dao层,必须从controller中传递过来,否则有关这三层的junit测试将无法进行;
10、Dao层直接返回List<Object>,后期添加cache后,Dao层只能返回List<id>;
11、Dao层获取一条数据的时候,仅允许使用id主键,其他方法只允许返回List<id>;
12、Domain层和DB table 一一对应,实现 Serializable 接口;
13、Domain 采用贫血模式;
14、所有DB查询不能出现关联查询、子查询(当有了cache之后更不允许出现);
15、对于数据量不大的表(无分页),sql中不允许出现order by,排序操作中java中进行;
16、Page/VO 层只是为page渲染服务的,不实现Serializable接口;
17、PageDomain 只能在模块详情页面和编辑页面中使用,查询列表时通常不允许返回List<PageDomain>;【List<Domain>】
18、每一个Java类都必须有基本的类注释,简单说明类的用途、创建人等信息;
19、后端String类型数据,必须用<c:out value="{data}" />渲染,它会过滤掉"<"、">"等字符,避免恶意数据造成损失;
二、测试代码规范
1、每个junit测试必须将该业务逻辑中对DB有修改的所有数据都进行断言判断才能算完成,不能只做数量断言;
2、每一个public方法应该对应一个具体的页面操作;
3、各层(dao、service、manager)不允许为了测试而新增方法;
4、insert 测试包括:
a、insert前table总数据;
b、insert后table总数据;
c、断言两个数据是否为+1关系;
d、根据insert的id查询对象,断言相关属性;
5、update测试包括:(根据具体业务来吧,大体上类似insert的思路)
三、建议性质
1、编码前采用有序列表的方式编写整个逻辑结构,之后填充代码
eg:编辑表单
{
//1、将当前表单form1 的delete=false;
coding....
//2、生成一个新的表单form2;
coding....
//3、找到所有引用form1的流程(delete=true),循环修改form1为form2
coding....
}
2、大的业务逻辑代码中,不同业务逻辑代码用空行隔开;
3、操作符前后加空格,避免代码过于拥挤;
4、一个方法不要有太多行代码,尽量控制在一屏之内(40行左右);