一、编码规约
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
万行或者单表容量超过
2
GB
,才推荐进行分库分表
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.服务器规约
五、安全规约