zoukankan      html  css  js  c++  java
  • 阿里巴巴Java开发手册(命名规范/常量定义篇)——查自己的漏-补自己的缺


    一、编程规约

    (一) 命名规约

    1. 【强制】所有编程相关命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束。

    反例: _name / __name / $Object / name_ / name$ / Object$

    6. 【强制】抽象类命名使用Abstract或Base开头;异常类命名使用Exception结尾;测试类命名以它要测试的类的名称开始,以Test结尾。

    8. 【强制】POJO类中的任何布尔类型的变量,都不要加is,否则部分框架解析会引起序列化错误。

    反例:定义为基本数据类型boolean isSuccess;的属性,它的方法也是isSuccess(),RPC框架在反向解析的时候,“以为”对应的属性名称是success,导致属性获取不到,进而抛出异常

    9. 【强制】包名统一使用小写,点分隔符之间有且仅有一个自然语义的英语单词。包名统一使用单数形式,但是类名如果有复数含义,类名可以使用复数形式。

    正例: 应用工具类包名为com.alibaba.mpp.util、类名为MessageUtils(此规则参考spring的框架结构)

    11.【推荐】如果使用到了设计模式,建议在类名中体现出具体模式。 说明:将设计模式体现在名字中,有利于阅读者快速理解架构设计思想。

    正例:public class OrderFactory; public class LoginProxy; public class ResourceObserver;

    12.【推荐】接口类中的方法和属性不要加任何修饰符号(public 也不要加),保持代码的简洁性,并加上有效的javadoc注释。尽量不要在接口里定义变量,如果一定要定义变量,肯定是与接口方法相关,并且是整个应用的基础常量。

    正例:接口方法签名:void f(); 接口基础常量表示:String COMPANY = "alibaba"; 反例:接口方法定义:public abstract void f(); 说明:JDK8中接口允许有默认实现,那么这个default方法,是对所有实现类都有价值的默认实现。

    13.接口和实现类的命名有两套规则:

    1)【强制】对于Service和DAO类,基于SOA的理念,暴露出来的服务一定是接口,内部的实现类用Impl的后缀与接口区别。 正例:CacheServiceImpl实现CacheService接口。
    2)【推荐】 如果是形容能力的接口名称,取对应的形容词做接口名(通常是–able的形式)。 正例:AbstractTranslator实现 Translatable。

    14.【参考】枚举类名建议带上Enum后缀,枚举成员名称需要全大写,单词间用下划线隔开。 说明:枚举其实就是特殊的常量类,且构造方法被默认强制是私有。 正例:枚举名字:DealStatusEnum;成员名称:SUCCESS / UNKOWN_REASON

    15.【参考】各层命名规约:

    A) Service/DAO层方法命名规约

    1) 获取单个对象的方法用get做前缀。

    2) 获取多个对象的方法用list做前缀。

    3) 获取统计值的方法用count做前缀。

    4) 插入的方法用save(推荐)或insert做前缀。

    5) 删除的方法用remove(推荐)或delete做前缀。

    6) 修改的方法用update做前缀。

    B) 领域模型命名规约

    1) 数据对象:xxxDO,xxx即为数据表名。

    2) 数据传输对象:xxxDTO,xxx为业务领域相关的名称。

    3) 展示对象:xxxVO,xxx一般为网页名称。

    4) POJO是DO/DTO/BO/VO的统称,禁止命名成xxxPOJO。

    (二) 常量定义

    2. 【强制】long或者Long初始赋值时,必须使用大写的L,不能是小写的l,小写容易跟数字1混淆,造成误解。

    说明:Long a = 2l; 写的是数字的21,还是Long型的2?

    3. 【推荐】不要使用一个常量类维护所有常量,应该按常量功能进行归类,分开维护。如:缓存相关的常量放在类:CacheConsts下;系统配置相关的常量放在类:ConfigConsts下。 说明:大而全的常量类,非得ctrl+f才定位到修改的常量,不利于理解,也不利于维护。

    4. 【推荐】常量的复用层次有五层:跨应用共享常量、应用内共享常量、子工程内共享常量、包内共享常量、类内共享常量。

    1) 跨应用共享常量:放置在二方库中,通常是client.jar中的const目录下。

    2) 应用内共享常量:放置在一方库的modules中的const目录下。 反例:易懂变量也要统一定义成应用内共享常量,两位攻城师在两个类中分别定义了表示“是”的变量: 类A中:public static final String YES = "yes"; 类B中:public static final String YES = "y"; A.YES.equals(B.YES),预期是true,但实际返回为false,导致产生线上问题。

    3) 子工程内部共享常量:即在当前子工程的const目录下。

    4) 包内共享常量:即在当前包下单独的const目录下。

    5) 类内共享常量:直接在类内部private static final定义。

    5. 【推荐】如果变量值仅在一个范围内变化用Enum类。如果还带有名称之外的延伸属性,必须使用Enum类,下面正例中的数字就是延伸信息,表示星期几。

    正例:public Enum{ MONDAY(1), TUESDAY(2), WEDNESDAY(3), THURSDAY(4), FRIDAY(5), SATURDAY(6), SUNDAY(7);}

  • 相关阅读:
    VS2010 自动跳过代码现象
    Reverse Linked List II 【纠结逆序!!!】
    Intersection of Two Linked Lists
    Linked List Cycle II
    Remove Nth Node From End of List 【另一个技巧,指针的指针】
    Swap Nodes in Pairs
    Merge Two Sorted Lists
    Remove Duplicates from Sorted List
    Linked List Cycle
    Dungeon Game
  • 原文地址:https://www.cnblogs.com/gzhcsu/p/7611288.html
Copyright © 2011-2022 走看看