Java 开发基础规范(初稿)

本文初衷
- 以本篇为引,获取到有识之士的一些意见或是看法,促进成长!
 
重要说明
- 2017-01:阿里公开了他们自己的规范,写得还是很合理的,也很清晰,重点推荐。
- 在 Google 里面搜索:
阿里巴巴 JAVA 开发手册 
 - 在 Google 里面搜索:
 
命名、规范
Java 相关命名、规范
- 命名:
- Java 类名命名(用名词性单词组合)
- 普通类名:首字母大写,需要两个、多个单词表达的,使用大驼峰命名法进行命名,
eg:CategoryService - 抽象类名:在普通类名的基础上对其命名后加上 Abstract,
eg:CategoryAbstract - 自定义异常类名:在普通类名的基础上对其命名后加上 Exception,
eg:CategoryException - 队列类名:在普通类名的基础上对其命名后加上 Queue,
eg:CategoryQueue - 后台任务类名:在普通类名的基础上对其命名后加上 Task 或 Job,
eg:CategoryTask、CategoryJob - Servlet 类名:在普通类名的基础上对其命名后加上 Servlet,
eg:CategoryServlet - Filter 类名:在普通类名的基础上对其命名后加上 Filter,
eg:CategoryFilter - 工厂类名:在普通类名的基础上对其命名后加上 Factory,
eg:CategoryFactory - 工具类名:在普通类名的基础上对其命名后加上 Util,
eg:CategoryUtil - 测试类名:在普通类名的基础上对其命名后加上 Test,
eg:CategoryServiceTest - 数据库访问层接口类名:在普通类名的基础上对其命名后加上 Dao,
eg:CategoryDao - 数据库访问层实现类名:在普通类名的基础上对其命名后加上 DaoImpl,
eg:CategoryDaoImpl - 业务层接口类名:在普通类名的基础上对其命名后加上 Service,
eg:CategoryService - 业务层实现类名:在普通类名的基础上对其命名后加上 ServiceImpl,
eg:CategoryServiceImpl - 控制层类名:在普通类名的基础上对其命名后加上 Controller,
eg:CategoryController、CategoryAction、CategoryActivity - 对象扩展类名:在普通类名的基础上对其命名后加上 VO,
eg:CategoryVO(Value Object)、CategoryDTO(Data Transfer Object)、CategoryPOJO(plain ordinary java object) 
 - 普通类名:首字母大写,需要两个、多个单词表达的,使用大驼峰命名法进行命名,
 - 常量名:全部字母大写,有多个单词用下划线分隔,
eg:MY_AGE - 常规变量名:首字母小写,需要两个、多个单词表达的,使用小驼峰命名法进行命名,
eg:categoryName - 复数变量名:首字母小写,需要两个、多个单词表达的,使用小驼峰命名法进行命名,eg:
List:categoryListMap:categoryMapSet:categorySet
 - package 名:所有单词全部小写,即使有多个单词组成,且不能使用下划线连接,或是其他任意字符连接,
eg:googlebook - 方法参数名:首字母小写,需要两个、多个单词表达的,使用小驼峰命名法进行命名,
eg:categoryName - 方法命名(用动词性单词开头):
- 数据库访问层方法名
saveCategory()deleteCategoryByObject()deleteCategoryById()updateCategoryByObject()updateCategoryById()findCategoryList()findCategory()
 - 业务层方法名
saveCategory()deleteCategoryByObject()deleteCategoryById()updateCategoryByObject()updateCategoryById()findCategoryList()findCategory()initCategory()openConnection()closeConnection()writeFile()readFile()
 
 - 数据库访问层方法名
 - 视图层(JSP、FreeMarker 等):
categoryListcategoryAddcategoryUpdatecategoryEditcategoryDetailcategoryTree
 
 - Java 类名命名(用名词性单词组合)
 - 规范:
- 当一个类有多个构造函数,或是多个同名方法,这些函数 / 方法应该按顺序出现在一起,中间不要放进其它函数 / 方法
 - 导入包的时候,import 后面不要使用通配符 * 来代替有些包的导入
 - 大括号与 if, else, for, do, while 语句一起使用,即使只有一条语句(或是空),也应该把大括号写上
 - 不要使用组合声明,比如 int a, b;
 - 需要时才声明,并尽快进行初始化
 - 注解紧跟在文档块后面,应用于类、方法和构造函数,一个注解独占一行
 
 - 注释:
 - 块注释
 
/*
logger.info("---------开始---------");
SubmitOrderInfo submitOrderInfo = getSubmitOrderInfo(orderId);
*/
- 行注释,只用来注释
 
//ResultInfo resultInfo = orderService.orderStateUpdate(voucherNo);
- 行注释,用来解释
 
private int categoryId = 1; // 1 是顶级分类的 ID
Mysql 相关命名、规范
表名:全部小写,需要两个、多个单词表达的使用下划线隔开,
eg:prd_category字段名:全部小写,需要两个、多个单词表达的使用下划线隔开,
eg:category_name注释:
行注释
# 下面内容需要先执行-- 下面内容需要先执行
块注释
/*
下面内容需要先执行
需要注意的是:分类的 ID 需要先检查
*/
- 程序 SQL 补丁文件命名,eg:
20160306-update-更新所有会员密码20160312-delete-删除指定会员密码20160313-insert-新增会员数据20160315-alter-更新会员邮箱字段长度
 
编码
- 数据源连接:
jdbc:mysql://localhost:3306/youshop?characterEncoding=utf-8 - Java 文件编码:
UTF-8 - XML 文件编码:
UTF-8 - Properties 文件编码:
UTF-8 - Mysql 字符集:
UTF-8 
其他
- Tab 缩进为 4 个空格,使用 IntelliJ IDEA 标准格式化即可
 - TODO 标记必须使用个人自定义 TODO,不能使用公共的
 - SVN、Git 提交必须有 Commit Message
 
资料
感谢
- 感谢 Lindp 提供意见