阿里Java编码规范摘要

来源:互联网 发布:硬笔行书知乎 编辑:程序博客网 时间:2024/06/05 13:21


一、编码规约

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 问题,可以使用如下方式来避免sumNPE问题: 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.服务器规约


五、安全规约