Java开发手册,阿里原稿梳理

命名规范

1.代码中的命名不能以下划线、美元符开始或结束。

2.不能拼音和英文公用。

3.类名大写开始的驼峰。UpperCamelCase

4.方法名、参数名、成员变量、局部变量统一使用小写开始的驼峰。

5.常量名全部用大写,单词间用下划线,切记要语义表达清楚完整。

6.抽象类命名以Abstract或Base开头,异常类命名使用Exception结尾;测试类以Test结尾。

7.POJO类中的布尔类型的变量,不要以is开头。如:private boolean isGood;的get、set方法,

  public boolean isGood() {

        return isGood;

    }

  public void setGood(boolean good) {

        isGood = good;

    }

set方法的参数变成了good,而不是isGood。

一些Web框架,页面使用框架的标签显示对象的值,就容易取不到,报异常。

8.包名统一使用小写,统一使用单数形式。如com.alibaba.ai.util。而不是utils。

9.杜绝不规范的肆意缩写。如 AbstractClass “缩写”命名成 AbsClass。

10.命名要有解释作用,不能int a。

11.如果模块、接口、类、方法使用了设计模式,命名的时候提现出设计模式,如LoginProxy;OrderFactory;EcodingFileter。

12.接口类中的方法和属性不要加任何修饰符,如public也不要。方法就直接void commit()最好。

因为接口中的每一个方法也是隐式抽象的,方法会被指定为public abstract。

13.对于Service和Dao类,基于SOA理念,暴露出来的服务一定是接口,如CacheService实现CacheServiceImpl接口。

14.枚举类名建议加Enum后缀。

15.Service / DAO 层方法命名规约

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

2 ) 获取多个对象的方法用 list 做前缀,复数形式结尾如:listObjects。

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 。

常量定义

1.不允许出现任何魔法值(magic value)(即未经预先定义的常量)直接出现在代码中。

如:int kpiValue=8*sqi。8就是魔法值。

2.使用long类型常量时,应用大写的L。小写的容易看成数字1.

3.常量的定义建议通过命名来分类,提高可读性和方便查找。如:缓存相关的常量命名为CACHE_XXXX。

代码格式

1.大括号的使用,内容为空则写成{},不为空则如下

if  (a!=c){

a=b+c;

}else{

}

2.小括号左右不留空格,反例:(  a==b  )。

3.if / for / while / switch / do 等保留字与括号之间都必须加空格。

4.任何二目三目运算符,左右两边各加一个空格。a&&b  a<b?b:c

public static void main(String[] args) {

// 缩进 4 个空格

String say = "hello";

// 运算符的左右必须有一个空格

int flag = 0;

// 关键词 if 与括号之间必须有一个空格,括号内的 f 与左括号,0 与右括号不需要空格

if (flag == 0) {

System.out.println(say);

}

// 左大括号前加空格且不换行;左大括号后换行

if (flag == 1) {

System.out.println("world");

// 右大括号前换行,右大括号后有 else,不用换行

} else {

System.out.println("ok");

// 在右大括号后直接结束,则必须换行

}

}

5.注释的双斜线与注释内容之间必须有个空格。

6.当行不超过120个字符,超出需换行,第二行相对第一行加4个空格。点符号、运算符与下文一同换行。

7.方法参数在定义和传入时,多个参数逗号后面必须加空格。method(arg1, arg2, arg3).

8.IDE 的 text file encoding 设置为 UTF -8 ; IDE 中文件的换行符使用 Unix 格式,不要使用 Windows 格式。

9.不要为了多行之间对齐而胡乱加空格。

10.任何情形,都没有必要出入多个空行进行隔开。

ORM映射

1.在表查询中,一律不要使用 * 作为查询的字段列表,需要哪些字段必须明确写明。

说明:1 ) 增加查询分析器解析成本。2 ) 增减字段容易与 resultMap 配置不一致。3)无用字

段增加网络消耗,尤其是 text 类型的字段。

2.POJO 类的布尔属性不能加 is ,而数据库字段必须加 is _。

3.不要用 resultClass 当返回参数,即使所有类属性名与数据库字段一一对应,也需

要定义。

4.sql. xml 配置参数使用:#{},# param # 不要使用${} 此种方式容易出现 SQL 注入。

5.iBATIS 自带的 queryForList(String statementName , int start , int size) 不推

荐使用。

6.不允许直接拿 HashMap 与 Hashtable 作为查询结果集的输出。

建表规约

1.表达是与否的字段,必须使用is_xxxx的方式命名,数据类型是unsigned tinyint。

2.表名、字段名必须使用小写字母或数字 , 禁止出现数字开头,禁止两个下划线中间只

出现数字。 MySQL 在 Windows 下不区分大小写,但在 Linux 下默认是区分大小写。因此,数据库名、表名、字段名,都不允许出现任何大写字母,避免节外生枝。

3.表名不使用复数名词。

4.禁用保留字,如 desc 、 range 、 match 、 delayed 等。

5.主键索引名为 pk_ 字段名;唯一索引名为 uk _字段名 ; 普通索引名则为 idx _字段名。

说明: pk_ 即 primary key;uk _ 即 unique key;idx _ 即 index 的简称。

6.小数类型为 decimal ,禁止使用 float 和 double 。

7.如果存储的字符串长度几乎相等,使用 char 定长字符串类型。

8.varchar 是可变长字符串,不预先分配存储空间,长度不要超过 5000,如果存储长

度大于此值,定义字段类型为 text ,独立出来一张表,用主键来对应,避免影响其它字段索

引效率。

9.表必备三字段: id , gmt _ create , gmt _ modified。其中 id 必为主键,类型为 bigint unsigned 、单表时自增、步长为 1。 gmt_create,gmt_modified 的类型均为 datetime 类型,前者现在时表示主动创建,后者过去分词表示被动更新。

10.表的命名最好是加上“业务名称_表的作用”。

11.库名与应用名称尽量一致。

12.单表行数超过 500 万行或者单表容量超过 2 GB ,才推荐进行分库分表。如果预计三年后的数据量根本达不到这个级别,不建议分表分库。

13.合适的字符存储长度,不但节约数据库表空间、节约索引存储,更重要的是提升检

索速度。其中无符号值可以避免误存负数。

SQL语句

1.不要使用 count( 列名 ) 或 count( 常量 ) 来替代 count( * ) , count( * ) 会统计值为 NULL 的行,而 count( 列名 ) 不会统计此列为 NULL 值的行。

2.count(distinct col) 计算该列除 NULL 之外的不重复行数,注意 count(distinct col 1, col 2 ) 如果其中一列全为 NULL ,那么即使另一列有不同的值,也返回为 0。

3.当某一列的值全是 NULL 时, count(col) 的返回结果为 0,但 sum(col) 的返回结果为

NULL ,因此使用 sum() 时需注意 NPE 问题。

4.在代码中写分页查询逻辑时,若 count 为 0 应直接返回,避免执行后面的分页语句。

5.不得使用外键与级联,一切外键概念必须在应用层解决。外键与级联更新适用于单机低并发,不适合分布式、高并发集群 ; 级联更新是强阻塞,存在数据库更新风暴的风险 ; 外键影响数据库的插入速度。

6.禁止使用存储过程,存储过程难以调试和扩展,更没有移植性。

7.数据订正(特别是删除、修改记录操作)时,要先 select ,避免出现误删除,确认

无误才能执行更新语句。

8.in 操作能避免则避免,若实在避免不了,需要仔细评估 in 后边的集合元素数量,控

制在 1000 个之内。

9.如果有国际化需要,所有的字符存储与表示,均以 utf -8 编码,注意字符统计函数

的区别。如果需要存储表情,那么选择 utf8mb 4 来进行存储,注意它与 utf -8 编码的区别。

10.TRUNCATE TABLE 不记录在日志中,所以无事务且不触发 trigger。谨慎使用。TRUNCATE 删除数据,不留日志。不带WHERE的DELETE语句有日志,可以ROLLBACK。而DROP TABLE则删除表结构。

安全规约

1.隶属于用户个人的页面或者功能必须进行权限控制校验。

2.用户敏感数据禁止直接展示,必须对展示数据进行脱敏。

3.用户输入的 SQL 参数严格使用参数绑定或者 METADATA 字段值限定,防止 SQL 注入,

禁止字符串拼接 SQL 访问数据库。

4.禁止向 HTML 页面输出未经安全过滤或未正确转义的用户数据。

5.表单、AJAX 提交必须执行 CSRF 安全验证。

6.在使用平台资源,譬如短信、邮件、电话、下单、支付,必须实现正确的防重放的机

制,如数量限制、疲劳度控制、验证码校验,避免被滥刷而导致资损。

7.发贴、评论、发送即时消息等用户生成内容的场景必须实现防刷、文本内容违禁词过

滤等风控策略。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,923评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,154评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,775评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,960评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,976评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,972评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,893评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,709评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,159评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,400评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,552评论 1 346
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,265评论 5 341
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,876评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,528评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,701评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,552评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,451评论 2 352

推荐阅读更多精彩内容