1. 命名

驼峰命名

class命名尽量表达含义,尽量使用常用单词

非static的方法和变量,使用驼峰命名

static的方法,使用驼峰命名

static的变量,尽量使用大写,以下划线区分单词

 

2. 代码格式化

统一代码格式化,导入格式文件

每次写一部分代码后按ctrl+shift+f格式化代码,ctrl+shift+o重新组织import。

尽量不自己进行格式化,而是用eclipse的自动格式化。

code template和code style的xml格式文件可以网络上搜索下载。

 

3. 注释

类注释,写清楚作者,类的大致作用

方法注释,写清楚该方法的作用,复杂的写出大致逻辑,参数意义

块注释,一个函数,先写注释,后写逻辑,块注释即为设计过程。

块注释采用 //,其他的采用 /** * */进行注释

 

4. 编译警告与todo标签

当有编译警告时,我们认为这段代码有问题,请去掉编译警告。如果是集合对象的类型转换,确认没有问题后,可压制警告

//TODO 的用法,该标签代表有任务未完成。自动生成代码里面的//TODO要删除掉

 

5. 模型与DAO

自己的bo对象可以继承一些公共的BaseObject

DAO的接口继承BaseDao接口,DAO的实现继承于XXXGenericDao 尽量调用XXXGenericDao已经提供的接口,将来方便做统一的修改

模型中尽量使用基本类型,对于int,long,boolean等,尽量使用基本类型,而不使用对象类型。运算时也使用基本类型。

 

6. Utils与ThreadLocal

对于一些较通用的方法,建议提取出来放在XXXUtils中

对于与业务逻辑无关的又需要使用的参数,如visitor、历史操作记录列表等,放在ThreadLocal中。

 

7. 接口

权限在interceptor中判断,在facade以下的接口,参数不传递visitor,使用时从ThreadContext中获取

userId在很多地方都会用到,应该本着如果接口逻辑会使用userId则在参数中定义userId,如果接口中没有userId则不定义userId

接口尽量保证完整封装,尽量保障重用性

 

8. 分层

action层作用是解析请求,分发接口,包装view。所以在action层以下,不应该出现servlet接口

facade层用来统一暴露service接口,并包含一定的显示逻辑,所以facade应在core中,facade拼装VO

service中用来封装细粒度的读写接口,为保证逻辑完整性,将写事务的主要逻辑封装在service中。

facade调用service,service调用dao。一般来说一个facade对应多个service,一个service对应多个dao。DAO不一定有专属的service,service也不一定有专属的facade

 

9. 循环

尽量使用1.5以后的for(O o : os)语法。

尽量不在for循环中依次查询数据库,除非明确知道for中的循环个数,且该循环次数可接受