阿里Java编码规范摘要


一、编码规约

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 层: 数据访问层,与底层 MySQLOracleHbase 进行数据交互。
  • 外部接口或第三方平台:包括其它部门 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.服务器规约


五、安全规约



你可能感兴趣的:(阿里Java编码规范摘要)