zoukankan      html  css  js  c++  java
  • 阿里巴巴Java开发手册-学习记录(一)编程规范_命名风格

      1 package com.zjk.core;
      2 
      3 import java.util.Date;
      4 import java.util.List;
      5 
      6 public class a1_NameStyle {
      7     public static void main(String[] args) {
      8         System.out.println(ConstantThis.MAX_STOCK_COUNT);
      9     }
     10 
     11     /**
     12      * 1. 【强制】代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束。
     13      * 反例:_name / __name / $name / name_ / name$ / name__
     14      */
     15     private void name(){
     16         String name;
     17     }
     18 
     19     /**
     20      * 2. 【强制】所有编程相关的命名严禁使用拼音与英文混合的方式,更不允许直接使用中文的方式。
     21      * 说明:正确的英文拼写和语法可以让阅读者易于理解,避免歧义。注意,纯拼音命名方式更要避免采用。
     22      * 正例:ali / alibaba / taobao / cainiao/ aliyun/ youku / hangzhou 等国际通用的名称,可视同英文。
     23      * 反例:DaZhePromotion [打折] / getPingfenByName() [评分] / int 某变量 = 3
     24      */
     25     private void nameEnCn(){
     26         String alibaba;
     27         String taobao;
     28     }
     29 }
     30 
     31 /**
     32  * 3. 【强制】类名使用UpperCamelCase风格,但以下情形例外:DO / BO / DTO / VO / AO / PO / UID等。
     33  * 正例:ForceCode / UserDO / HtmlDTO / XmlService / TcpUdpDeal / TaPromotion
     34  * 反例:forcecode / UserDo / HTMLDto / XMLService / TCPUDPDeal / TAPromotion
     35  */
     36 class UserDO {
     37     private Integer id;
     38     private String name;
     39 
     40     /**
     41      * 4. 【强制】方法名、参数名、成员变量、局部变量都统一使用lowerCamelCase风格。
     42      * 正例: localValue / getHttpMessage() / inputUserId
     43      */
     44     public Integer getId() {
     45         return id;
     46     }
     47 
     48     public void setId(Integer id) {
     49         this.id = id;
     50     }
     51 
     52     public String getName() {
     53         return name;
     54     }
     55 
     56     public void setName(String name) {
     57         this.name = name;
     58     }
     59 
     60 }
     61 
     62 /**
     63  *5. 【强制】常量命名全部大写,单词间用下划线隔开,力求语义表达完整清楚,不要嫌名字长。
     64  * 正例:MAX_STOCK_COUNT / CACHE_EXPIRED_TIME
     65  * 反例:MAX_COUNT / EXPIRED_TIME
     66  */
     67 interface ConstantThis{
     68     final Integer MAX_STOCK_COUNT=1000;
     69 }
     70 
     71 /**
     72  *6. 【强制】抽象类命名使用Abstract或Base开头;
     73  * 异常类命名使用Exception结尾;
     74  * 测试类命名以它要测试的类的名称开始,以Test结尾。
     75  */
     76 abstract class AbstractClassThis{}
     77 class MessageException{}
     78 class MessageTest{}
     79 
     80 /**
     81  *7. 【强制】类型与中括号紧挨相连来表示数组。
     82  * 正例:定义整形数组int[] arrayDemo;
     83  * 反例:在main参数中,使用String args[]来定义。
     84  */
     85 class User1{
     86     int[] arrayDemo;
     87     String[] args;
     88 
     89     /**
     90      *8. 【强制】POJO类中的任何布尔类型的变量,都不要加is前缀,否则部分框架解析会引起序列化错误。
     91      * 说明:在本文MySQL规约中的建表约定第一条,表达是与否的值采用is_xxx的命名方式,所以,需要在<resultMap>设置从is_xxx到xxx的映射关系。
     92      * 反例:定义为基本数据类型Boolean isDeleted的属性,它的方法也是isDeleted(),框架在反向解析的时候,“误以为”对应的属性名称是deleted,
     93      * 导致属性获取不到,进而抛出异常
     94      */
     95     /// MySQL中使用
     96 //    boolean is_female;
     97     boolean female;
     98 }
     99 
    100 /**
    101  * 9. 【强制】包名统一使用小写,点分隔符之间有且仅有一个自然语义的英语单词。
    102  * 包名统一使用单数形式,但是类名如果有复数含义,类名可以使用复数形式。
    103  * 正例:应用工具类包名为com.alibaba.ei.kunlun.aap.util、类名为MessageUtils(此规则参考spring的框架结构)
    104  */
    105 class GetDateUtils{
    106     String packageName="com.alibaba.ei.kunlun.aap.util";
    107 }
    108 
    109 /**
    110  * 10. 【强制】避免在子父类的成员变量之间、或者不同代码块的局部变量之间采用完全相同的命名,使可读性降低。
    111  * 说明:子类、父类成员变量名相同,即使是public类型的变量也是能够通过编译,而局部变量在同一方法内的不同代码块中同名也是合法的,但是要避免使用。
    112  * 对于非setter/getter的参数名称也要避免与成员变量名称相同。
    113  */
    114 class ConfusingName {
    115     public int stock;
    116     boolean condition=true;
    117     // 非setter/getter的参数名称,不允许与本类成员变量同名
    118     public void get(String alibaba) {
    119         if (condition) {
    120             final int money = 666;
    121             // ...
    122         }
    123         for (int i = 0; i < 10; i++) {
    124             // 在同一方法体中,不允许与其它代码块中的money命名相同
    125             final int money = 15978;
    126             // ...
    127         }
    128     }
    129 }
    130 
    131 class Son extends ConfusingName {
    132     // 不允许与父类的成员变量名称相同
    133     public int stock;
    134 }
    135 
    136 /**
    137  *11. 【强制】杜绝完全不规范的缩写,避免望文不知义。
    138  * 反例:AbstractClass“缩写”命名成AbsClass;condition“缩写”命名成 condi,此类随意缩写严重降低了代码的可阅读性。
    139  */
    140 abstract class AbstractClass{
    141     String condition;
    142 }
    143 
    144 /**
    145  * 12. 【推荐】为了达到代码自解释的目标,任何自定义编程元素在命名时,使用尽量完整的单词组合来表达。
    146  * 正例:在JDK中,对某个对象引用的volatile字段进行原子更新的类名为:AtomicReferenceFieldUpdater。
    147  * 反例:常见的方法内变量为int a;的定义方式。
    148  */
    149 class AtomicReferenceFieldUpdater{}
    150 
    151 /**
    152  *13. 【推荐】在常量与变量的命名时,表示类型的名词放在词尾,以提升辨识度。
    153  * 正例:startTime / workQueue / nameList / TERMINATED_THREAD_COUNT
    154  * 反例:startedAt / QueueOfWork / listName / COUNT_TERMINATED_THREAD
    155  */
    156 interface ConstantThis2{
    157     final Date startTime = new Date();
    158 }
    159 
    160 /**
    161  *14. 【推荐】如果模块、接口、类、方法使用了设计模式,在命名时需体现出具体模式。
    162  * 说明:将设计模式体现在名字中,有利于阅读者快速理解架构设计理念。
    163  * 正例: public class OrderFactory; public class LoginProxy; public class ResourceObserver;
    164  */
    165 class OrderFactory{}
    166 class LoginProxy{}
    167 class ResourceObserver{}
    168 
    169 /**
    170  *16. 接口和实现类的命名有两套规则:
    171  * 1)【强制】对于Service和DAO类,基于SOA的理念,暴露出来的服务一定是接口,内部的实现类用Impl的后缀与接口区别。
    172  * 正例:CacheServiceImpl实现CacheService接口。
    173  * 2)【推荐】如果是形容能力的接口名称,取对应的形容词为接口名(通常是–able的形容词)。
    174  * 正例:AbstractTranslator实现 Translatable接口。
    175  */
    176 interface UserService{}
    177 class UserServiceImpl implements UserService{}
    178 
    179 /**
    180  *15. 【推荐】接口类中的方法和属性不要加任何修饰符号(public 也不要加),保持代码的简洁性,并加上有效的Javadoc注释。
    181  * 尽量不要在接口里定义变量,如果一定要定义变量,确定与接口方法相关,并且是整个应用的基础常量。
    182  * 正例:接口方法签名 void commit(); 接口基础常量 String COMPANY = "alibaba";
    183  * 反例:接口方法定义 public abstract void f();
    184  * 说明:JDK8中接口允许有默认实现,那么这个default方法,是对所有实现类都有价值的默认实现。
    185  */
    186 
    187 /**
    188  * @author:zjk
    189  * @version:1.0v
    190  */
    191 interface UserDao{
    192 
    193     /**
    194      * 18. 【参考】各层命名规约:
    195      * A) Service/DAO层方法命名规约
    196      * 1) 获取单个对象的方法用get做前缀。
    197      * 2) 获取多个对象的方法用list做前缀,复数结尾,如:listObjects。
    198      * 3) 获取统计值的方法用count做前缀。
    199      * 4) 插入的方法用save/insert做前缀。
    200      * 5) 删除的方法用remove/delete做前缀。
    201      * 6) 修改的方法用update做前缀。
    202      */
    203 
    204     /**
    205      * 通过id获取UserDO信息
    206      * @param id
    207      * @return userDO
    208      */
    209     UserDO getUserById(Integer id);
    210     List<UserDO> listAllUsers();
    211     Integer countAllUsers();
    212     void insertUser(UserDO userDO);
    213     void deleteUserById(Integer id);
    214     void updateUser(UserDO userDO);
    215 }
    216 
    217 /**
    218  * B) 领域模型命名规约
    219  * 1) 数据对象:xxxDO,xxx即为数据表名。
    220  * 2) 数据传输对象:xxxDTO,xxx为业务领域相关的名称。
    221  * 3) 展示对象:xxxVO,xxx一般为网页名称。
    222  * 4) POJO是DO/DTO/BO/VO的统称,禁止命名成xxxPOJO。
    223  */
    224 class DepartmentDO{}
    225 class DepartmentDTO{}
    226 class RegistVO{}
    227 
    228 /**
    229  * 17. 【参考】枚举类名带上Enum后缀,枚举成员名称需要全大写,单词间用下划线隔开。
    230  * 说明:枚举其实就是特殊的常量类,且构造方法被默认强制是私有。
    231  * 正例:枚举名字为ProcessStatusEnum的成员名称:SUCCESS / UNKNOWN_REASON。
    232  */
    233 enum UserTypeEnum{}

    源文件地址:阿里巴巴Java开发手册(泰山版).pdf

  • 相关阅读:
    Mysql(7) _常用函数
    Mysql(6)_ 帮助的使用
    Mysql(5)_ 基本数据类型-时间
    Mysql(4)_整型和浮点型
    1 HTTP请求头Header及其作用详解
    Java(35) _JDBC批量插入数据二
    Java(34)_ 用JDBC批量向数据库插入语句
    Java(33)_ JDBC指针移动
    Mysql(3)_ Mycat简介
    Mysql(2)_ binlog文件
  • 原文地址:https://www.cnblogs.com/Mufasa/p/13393723.html
Copyright © 2011-2022 走看看