多年的一线代码经验总结出的开发规范,如下,供参考!(附件是格式化代码的文件)
一、命名规范
1. 使用完整的英文名称,例如:firstName, grandTotal, currentAccount
2. 专有名词使用专业术语,实在不好翻译请使用拼音全称
3. 变量使用缩写要一致,如number 、num、no应统一
4. Java变量名称使用驼峰写法如:oneTwoThree
5. Java类名称首字母大写,如:OneTwoThree
6. 变量名避免太长,一般小于18个字符
7. 避免只用大小写区分类似变量名称,如:oneTwoThree,oneTWOThree
8. 对常用的缩写术语,遵守使用习惯。如:sqlDatabase、SqlDatabase而不用SQLDatabase、sQLDatabase
9. 接口命名以大写字母“I”开头,抽象类以“Abstract”开头
10. 实现类以”Ipml”结尾
11. 同一个变量,在作为参数传递时,变量名要一致
12. 复数型的变量,后面加s表示复数
二、注释规范
1. 注释包括:类/接口文件注释、方法注释、方法单行注释、变量注释
2. 类注释写在类的上方,包括:类名、描述、作者、修改日期
3. 方法注释写在方法上方,包括:方法功能、参数、返回值、异常
4. 单行注释(/*…*/)写在每行的上方或者行尾,一般关键地方要写注释
三、语句规范
1. 每一行写一条语句
2. if语句哪怕只有一行,也要用{}
3. for循环的临时变量,建议加上tmp前缀
4. 单个类文件,一般不超过1000行;单个方法一般不超过200行
5. 大量重复的代码,一定是可以优化的,一般抽取为公共的service或者工具类
6. 能使用开源工具类的地方,不要自己写工具类
7. 全局变量请使用this关键字,例如this.xxx
8. 代码中不要出现硬编码,如需要出现,请使用常量类,或者枚举类,或者配置文件
四、日志规范
1. 日志请使用log4j.xml配置文件
2. 至少需要配置文件输出,文件按大小滚动一定的个数,通常为100M,10个
3. 开发阶段使用debug级别日志,生产环境使用info级别的日志
4. 重要方法需要在入参、重要变量、返回值处输出日志
5. 任何地方不得以System.print.out方式输出日志
6. 捕捉异常的地方必须输出日志,并直接打印异常对象
7. 日志尽量以英文形式输出
8. 不得输出毫无意义的日志,除非是为了完善异常
五、MVC开发规范
1. 一般系统分为Controller层、Service层和Dao层
2. Controller层只负责展现视图和传递数据,避免写很长的业务逻辑代码
3. Dao层只负责和数据库交互,避免写很长的业务逻辑代码
4. Service层写业务逻辑,向上(即Controller层)返回处理完的数据,向下(即Dao层)使用查询出来的语句,完成业务逻辑的封装
5. 单个DAO只操作单张表
6. 避免出现毫无意义的Service接口
7. DAO和Service应当有单元测试
8. 相同业务处理的类放在同一个包中,避免一个包只有一个类
9. 使用页面同步扭转,数据异步展现的方式进行交互
10. 能用注解的地方,不要用配置文件
11. 不同环境需要引用不同的参数时,需要将参数写在配置文件中;不同环境引用相同的参数时,参数写在常量类中。
六、异常规范
1. 异常分为系统异常和业务异常
2. 业务异常应定义具体的枚举类,包括异常代码和异常信息
3. Dao、Service层的异常往上抛,Controller层做统一异常处理
4. 每个异常必须有logger.error的日志输出,异常对象必须在日志中输出
5. 未知的异常用Exception对象处理
七、数据库设计规范
1. 数据库表名一般用英文小写,多个单词的组合用下划线隔开
2. 数据库字段用英文小写全称,多个单词的组合用下划线隔开
3. 数据库表一般用id自增作为主键,尽量避免联合主键
4. 数据库表一般要有create_time和update_time字段
5. 重要的数据库表还需要设计version字段,方便升级
6. 标志位的数据库表字段,应避免0、1或者Y、N等毫无意义或需要转换意义的取值,应直接为标志的全称,例如sent、unsend
7. 凡是需要用到复杂存储过程或者复杂sql语句,或者联合主键的地方,应考虑数据库表是否设计合理
八、附件使用方法
1. 打开Eclipse->Window-->Preferences-->Java-->CodeStyle-->Code Templates/Formatter
2. 导入附件中的两个文件
3. 编写代码时使用CTRL+SHIFT+F进行代码格式化
附件一(上传不了文件只能拷贝源码了,保存为codetemplates.xml文件):
/**
* @return the ${bare_field_name}
*//**
* @param ${param} the ${bare_field_name} to set
*//**
* ${tags}
*//**
*
*//**
* @类名: ${file_name}
* @描述:
* @作者: ${user}
* @修改日期: ${date}
* ${tags}
*//**
*
*//**
* 功能描述:
* ${tags}
*//**
* ${tags}
* ${see_to_target}
*/${filecomment}
${package_declaration}
${typecomment}
${type_declaration}
// ${todo} Auto-generated catch block
${exception_var}.printStackTrace();// ${todo} Auto-generated method stub
${body_statement}${body_statement}
// ${todo} Auto-generated constructor stubreturn ${field};${field} = ${param};
附件二(上传不了文件只能拷贝源码了,保存为codetemplates.xml文件):