引言
本文为个人读《阿里巴巴java开发手册1.5》和《编程匠艺》的心得,整理以形成个人良好的代码书写风格
<>一、命名风格
* 代码中的命名均不能以下划线或美元符号开始和结束
错误示例: _nameError$
* 严禁使用拼音与英文混合的命名方式,除国际通用名称,一律使用英文
alibaba / taobao / youku / hangzhou 等国际通用的名称,可视同英文
* 类名使用首字母大写的驼峰命名法
UpperCamelCase
但以下情形例外:DO / BO / DTO / VO / AO / PO / UID等
* 方法名、参数名、成员变量、局部变量使用首字母小写的驼峰命名法
localValue / getHttpMessage() / inputUserId
* 常量命名全部大写,单词间用下划线隔开,力求语义表达完整清楚
MAX_STOCK_COUNT / CACHE_EXPIRED_TIME
* 包名统一使用小写,点分隔符之间有且仅有一个自然语义的英语单词。包名统一使 用单数形式,但是类名如果有复数含义,类名可以使用复数形式
应用工具类包名为 com.alibaba.ai.util、类名为 MessageUtils(此规则参考 spring 的框架结构)
* 避免在子父类的成员变量之间或不同代码块的局部变量之间采用完全相同的命名,使可读性降
应用工具类包名为 com.alibaba.ai.util、类名为 MessageUtils(此规则参考 spring 的框架结构)
* 自定义编程元素在命名时,使用尽量完整的单词组合来表达其意
* 在long或者Long赋值时,数值后使用大写的L,不能是小写的l,小写容易跟数 字1混淆,造成误解。
Long a = 2l; 写的是数字的 21,还是Long 型的 2
<>二、代码格式
* 采用4个空格缩进,禁止使用tab字符
如果使用 tab 缩进,必须设置1 个tab 为4 个空格。
IDEA 设置 tab 为4 个空格时,请勿勾选 Use tab character,而在 eclipse 中,必须勾选 insert spaces
for tabs
* 注释的双斜线与注释内容之间有且仅有一个空格
int i = 0;// 这是示例注释,请注意在双斜线之后有一个空格
* 在进行类型强制转换时,右括号与强制转换值之间不需要任何空格隔开。
long first = 1000000000000L;
int second = (int)first + 2;
* 单行字符数限制不超过120个,超出需要换行,换行时遵循如下原则
- 第二行相对第一行缩进4 个空格
- 运算符与下文一起换行
- 方法调用的点符号与下文一起换行
- 在逗号和括号后换行
* 方法参数在定义和传入时,多个参数逗号后边必须加空格
method(args1, args2, args3);
* 没有必要增加若干空格来使变量的赋值等号与上一行对应位置的等号对齐。
int one = 1;
long two = 2L;
float three = 3F;
StringBuilder sb = new StringBuilder();
* 不同逻辑、不同语义、不同业务的代码之间插入一个空行分隔开来以提升可读性
任何情形,没有必要插入多个空行进行隔开。
* 在高并发场景中,避免使用”等于”判断作为中断或退出的条件。
如果并发控制没有处理好,容易产生等值判断被“击穿”的情况,使用大于或小于的区间判断条件来代替。
* 不要在条件判断中执行其它复杂的语句,将复杂逻辑判断的结果赋值给一个有意义的布尔变量名,以提高可读性
final boolean existed = (file.open(fileName, “w”) != null) && (…) || (…);
if (existed) {
…
}
* 循环体中的语句要考量性能,以下操作尽量移至循环体外处理,如定义对象、变 量、获取数据库连接,进行不必要的 try-catch操作
* 避免采用取反逻辑运算符
<>三、注释规约
* 所有的类都必须添加创建者和创建日期。
* 用中文注释把问题说清楚。专有名词与关键字保持英文原文即可。
TCP 连接超时
* 代码修改的同时,注释也要进行相应的修改
代码与注释更新不同步,就像路网与导航软件更新不同步一样,如果导航软件严重滞后,就失去了 导航的意义
<>四、数据库规约
* 使用密文存储用户敏感数据,严禁使用明文存取
* 用户敏感数据禁止直接展示
中国大陆个人手机号码显示为:137****0969,隐藏中间 4 位,防止隐私泄露
* 用户请求传入的任何参数必须做有效性验证
* 表达是与否概念的字段,必须使用is_xxx的方式命名
数据类型是unsigned tinyint(1表示是,0表示否)。
* 表名、字段名必须使用小写字母或数字,禁止出现数字开头,禁止两个下划线中间只出现数字。
数据库字段名的修改代价很大,因为无法进行预发布,所以字段名称需要慎重考虑
MySQL 在 Windows下不区分大小写,但在 Linux下默认是区分大小写。因此,数据库名、表 名、字段名,都不允许出现任何大写字母
eg: aliyun_admin,rdc_config,level3_name
* 主键索引名为 pk_字段名;唯一索引名为 uk_字段名;普通索引名则为 idx_字段名
pk_ 即primary key;uk_ 即 unique key;idx_ 即index的简称。
* 禁用保留字
* 存储的字符串长度几乎相等,使用 char定长字符串类型。
* varchar是可变长字符串,不预先分配存储空间,长度不要超过5000,如果存储长 度大于此值,定义字段类型为
text,独立出来一张表,用主键来对应,避免影响其它字段索 引效率
* 表必备三字段:id, create_time, update_time
:其中id 必为主键,类型为bigint unsigned、单表时自增、步长为 1。create_time, update_time 的类型均为
datetime 类型。
* 表的命名最好是遵循“业务名称_表的作用”
alipay_task / force_project / trade_config