阿里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 万行或者单表容量超过 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.服务器规约


五、安全规约



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值