阿里巴巴技术开发手册记录

编程规约需要注意的

  • 抽象类必须以Abstract或者Base开头,自定义异常类以Exception结尾,单元测试类以Test结尾
  • 布尔类型的变量不要以Is开头,防止部分框架序列化会有问题。
  • 包名以统一小写,点分隔符之间有且仅有一个英语单词,而且必须是单数形式,类可以复数
  • 如果用到了设计模式必须要将设计模式的名称体现在类名里面

    OrderFactory
    PoolSingleton
    LoginProxy
    ResourceObserver
    
  • 接口中的方法和属性不要加任何修饰符
  • 枚举类命名以Enum结尾,里面的变量都是大写
  • 各层命名规则

    service或dao层
        1) 获取单个对象的方法用get做前缀。
        2) 获取多个对象的方法用list做前缀。
        3) 获取统计值的方法用count做前缀。
        4) 插入的方法用save(推荐)或insert做前缀。
        5) 删除的方法用remove(推荐)或delete做前缀。
        6) 修改的方法用update做前缀。
    领域模型命名规约
        1) 数据对象:xxxDO,xxx即为数据表名。
        2) 数据传输对象:xxxDTO,xxx为业务领域相关的名称。
        3) 展示对象:xxxVO,xxx一般为网页名称。
        4) POJO是DO/DTO/BO/VO的统称,禁止命名成xxxPOJO。
    

    常量定义

  • 常量命名全大写,单词间用下划线隔开
  • 不要让未经定义的常量直接出现在代码。

    哪怕改变量只出现一次,也要定义专门的常量
    String key = "Id#taobao_" + tradeId;
    cache.put(key, value);
    
  • long类型的变量赋值时候一大写的L结尾,防止混淆
  • 不要使用一个常量类维护所有常量,应该按常量功能进行归类,分开维护
  • 缓存相关的常量放在类:CacheConsts下;系统配置相关的常量放在类:ConfigConsts下。

代码格式

  • if/for/while/switch/do等保留字与括号之间都必须加空
  • 缩进采用4个空格,禁止使用tab字符
  • 方法参数在定义和传入时,多个参数逗号后边必须加空格
  • IDE的text file encoding设置为UTF-8; IDE中文件的换行符使用Unix格式

OOP规约

  • 静态变量或者静态方法直接类名点进行访问,没必要new一个对象进行访问,徒增编译器成本
  • 所有重写方法加上@Override注解
  • 相同的参数类型,相同的业务含义,才可以使用可变参数,尽量不要使用object,不要给后人挖坑
  • 接口过时必须加@Deprecated注解
  • 不能使用过时的方法和类
  • 相同类型包装类对象最好以equal方式比较大小。

    例如Integer在-128至127范围内的赋值,
    Integer对象是在IntegerCache.cache产生,会复用已有对象
    
  • 所有的POJO变量都使用包装对象类型
  • RPC方法的参数和返回值都是使用包装对象类型
  • 所有的局部变量都使用基本类型
  • POJO类不要给变量设置默认值
  • 序列化类新增属性时候不要修改 serialVersionUID的值
  • 构造方法里面不要加任何业务逻辑,如果要加在init方法里面加
  • POJO类必须写toString方法
  • 内种方法定义顺序是 公有的或者保护的方法==》私有方法==》getter和setter
  • 字符串连接方式以StringBuilder的append方式
  • 类成员与方法访问控制从

    1) 如果不允许外部直接通过new来创建对象,那么构造方法必须是private。
    2) 工具类不允许有public或default构造方法。
    3) 类非static成员变量并且与子类共享,必须是protected!
    4) 类非static成员变量并且仅在本类使用,必须是private。
    5) 类static成员变量如果仅在本类使用,必须是private!
    6) 若是static成员变量,必须考虑是否为final!
    7) 类成员方法只供类内部调用,必须是private。
    8) 类成员方法只对继承类公开,那么限制为protected!
    

集合处理

  • 关于hashCode和equals的处理
  • 使用Arrays.asList()方法时候,不能使用其修改相关集合的方法,

    它的add/remove/clear方法会抛出UnsupportedOperationException异常
      Arrays.asList()//返回的是个ArrayList 匿名类
      ArrayList