一、编码规约
1. 命名约定
1. 类名使用
UpperCamelCase
风格,必须遵从驼峰形式,但以下情形例外:(领域模型 的相关命名)DO
/
BO
/
DTO
/
VO等
2. 抽象类命名使用
Abstract
或
Base
开头;异常类命名使用
Exception
结尾;测试类 命名以它要测试的类的名称开始,以
Test
结尾,枚举类名建议带上
Enum
后缀
3. 包名统一使用小写,点分隔符之间有且仅有一个自然语义的英语单词
2.常量定义
1. long
或者
Long
初始赋值时,必须使用大写的
L
3.格式约定
4. OOP规约
1. 所有的相同类型的包装类对象之间值的比较,全部使用equals方法比较
2. POJO
类必须写
toString
方法
3. 循环体内,字符串的连接方式,使用
StringBuilder
的
append
方法进行扩展(反编译出的字节码文件显示每次循环都会
new
出一个StringBuilder
对象)
4. 慎用 Object 的 clone 方法来拷贝对象(浅拷贝)
5.集合处理
1. 只要重写equals,就必须重写hashCode
2.使用
entrySet
遍历
Map
类集合
KV,而不是
keySet 方式进行遍历
6.并发处理
7.控制语句
8.注释规约
9.其他
二、异常日志
1.异常处理
1.Java
类库中定义的一类
RuntimeException
可以通过预先检查进行规避,而不应该 通过catch
来处理,比如:IndexOutOfBoundsException,NullPointerException等等
2.禁止对大段代码进行
try-catch,这是不负责任的表现
3.禁止在 finally 块中使用 return,finally 块中的 return 返回后方法结束执行,不 会再执行 try 块中的 return 语句
4.定义时区分
unchecked
/
checked
异常,避免直接使用
RuntimeException
抛出, 更不允许抛出
Exception
或者
Throwable,应使用有业务含义的自定义异常
2.日志规约
1.对
trace/debug/info
级别的日志输出,必须使用条件输出形式或者使用占位符的方式
2.谨慎地记录日志。生产环境禁止输出
debug
日志;有选择地输出
info
日志;如果使 用
warn
来记录刚上线时的业务行为信息,一定要注意日志输出量的问题, 避免把服务器磁盘 撑爆,并记得及时删除这些观察日志
三、MySQL规约
1. 建表规约
1.表名、字段名必须使用小写字母或数字;禁止出现数字开头,禁止两个下划线中间只
出现数字
2.
唯一索引名为
uk_字段名;普通索引名则为
idx_字段名
3.表必备三字段:id
(unsigned bigint) ,
gmt_create,
gmt_modified
4.单表行数超过
500
万行或者单表容量超过
2GB,才推荐进行分库分表
2.索引规约
1. 建组合索引的时候,区分度最高的在最左边, 最左前缀原则
3.SQL规约
1. count(*)会统计值为
NULL
的行,而
count(列名)不会统计此列为
NULL
值的行
2. 当某一列的值全是
NULL
时,count(col)的返回结果为
0,但
sum(col)的返回结果为
NULL,因此使用
sum()时需注意
NPE
问题,可以使用如下方式来避免sum的NPE问题: SELECT
IF(ISNULL(SUM(g)),0,SUM(g)) FROM
table
4.ORM规约
四、工程规约
1.应用分层
- 开放接口层: 可直接封装
Service
接口暴露成
RPC
接口;通过
Web
封装成
http
接口;网关控 制层等。
- 终端显示层:各个端的模板渲染并执行显示层。当前主要是
velocity
渲染,JS
渲染,JSP
渲 染,移动端展示层等。
- Web
层(Controller):主要是对访问控制进行转发,各类基本参数校验,或者不复用的业务简单处理等。
- Service
层:相对具体的业务逻辑服务层。
- Manager
层:通用业务处理层,它有如下特征:
1) 对第三方平台封装的层,预处理返回结果及转化异常信息;
2) 对Service层通用能力的下沉,如缓存方案、中间件通用处理; 3) 与DAO层交互,对DAO的业务通用能力的封装。
- DAO
层: 数据访问层,与底层
MySQL、Oracle、Hbase
进行数据交互。
- 外部接口或第三方平台:包括其它部门 RPC 开放接口,基础平台,其它公司的 HTTP 接口
2. 分层领域模型规约:
DO(Data
Object):与数据库表结构一一对应,通过
DAO
层向上传输数据源对象。
DTO(Data
Transfer Object):数据传输对象,Service
和
Manager
向外传输的对象。
- BO(Business
Object):业务对象。可以由
Service
层输出的封装业务逻辑的对象。
- QUERY:数据查询对象,各层接收上层的查询请求。注:超过
2
个参数的查询封装,禁止 使用
Map
类来传输。
- VO(View
Object):显示层对象,通常是
Web
向模板渲染引擎层传输的对象
2.二方库规约
3.服务器规约
五、安全规约