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中的循环个数,且该循环次数可接受