插件命名

代码规范

1.命名风格

1.【强制】类名使用 UpperCamelCase 风格,但以下情形例外:DO / BO / DTO / VO / AO / PO / UID 等。
	正例:MarcoPolo / UserDO / XmlService / TcpUdpDeal / TaPromotion
	反例:macroPolo / UserDo / XMLService / TCPUDPDeal / TAPromotion


2.【强制】方法名、参数名、成员变量、局部变量都统一使用 lowerCamelCase 风格,必须遵从驼峰形式。
    正例: localValue / getHttpMessage() / inputUserId
3.【强制】常量命名全部大写,单词间用下划线隔开,力求语义表达完整清楚,不要嫌名字长。
	正例:MAX_STOCK_COUNT
	反例:MAX_COUNT
4.【强制】抽象类命名使用 Abstract 或 Base 开头;异常类命名使用 Exception 结尾;测试类命名以它要测试的类的名称开始,以 Test 结尾。
5.【强制】包名统一使用小写,点分隔符之间有且仅有一个自然语义的英语单词。包名统一使用单数形式,但是类名如果有复数含义,类名可以使用复数形式。
	正例:应用工具类包名为 com.alibaba.ai.util、类名为 MessageUtils(此规则参考 spring 的框架结构)
6.【强制】杜绝完全不规范的缩写,避免望文不知义。
	反例:AbstractClass“缩写”命名成 AbsClass;condition“缩写”命名成 condi,此类随意缩写严重降低了代码的可阅读性。
7.【参考】各层命名规约:
	A) 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。

2.常量定义

1.【强制】不允许任何魔法值(即未经预先定义的常量)直接出现在代码中。
	反例:	String key = "Id#taobao_" + tradeId;
 			cache.put(key, value);
2.【推荐】如果变量值仅在一个固定范围内变化用 enum 类型来定义。
	说明:如果存在名称之外的延伸属性应使用 enum 类型,下面正例中的数字就是延伸信息,表示一年中的第几个季节。
	正例:
	public enum SeasonEnum {
 		SPRING(1), SUMMER(2), AUTUMN(3), WINTER(4);
 		private int seq;
 		SeasonEnum(int seq){
 			this.seq = seq;
 		}
	}

3.注释规约

1.【强制】类、类属性、类方法的注释必须使用 Javadoc 规范,使用/**内容*/格式,不得使用 // xxx 方式。
2.【强制】所有的抽象方法(包括接口中的方法)必须要用 Javadoc 注释、除了返回值、参数、异常说明外,还必须指出该方法做什么事情,实现什么功能。
3.【强制】所有的枚举类型字段必须要有注释,说明每个数据项的用途
4.【参考】谨慎注释掉代码。在上方详细说明,而不是简单地注释掉。如果无用,则删除。
5.【参考】对于注释的要求:
	第一、能够准确反应设计思想和代码逻辑;
	第二、能够描述业务含义,使别的程序员能够迅速了解到代码背后的信息。
	完全没有注释的大段代码对于阅读者形同天书,注释是给自己看的,即使隔很长时间,也能清晰理解当时的思路;
	注释也是给继任者看的,使其能够快速接替自己的工作。

4.其他

1.【推荐】防止 NPE,是程序员的基本修养,注意 NPE 产生的场景:
	1)返回类型为基本数据类型,return 包装数据类型的对象时,自动拆箱有可能产生 NPE。
 		反例:public int f() { return Integer 对象}, 如果为 null,自动解箱抛 NPE。
	2) 数据库的查询结果可能为 null。
	3) 集合里的元素即使 isNotEmpty,取出的数据元素也可能为 null。
	4) 远程调用返回对象时,一律要求进行空指针判断,防止 NPE。
	5) 对于 Session 中获取的数据,建议 NPE 检查,避免空指针。
	6) 级联调用 obj.getA().getB().getC();一连串调用,易产生 NPE。
		正例:使用 JDK8 的 Optional 类来防止 NPE 问题。
2.【强制】用户输入的 SQL 参数严格使用参数绑定或者 METADATA 字段值限定,防止 SQL 注入,禁止字符串拼接 SQL 访问数据库。
3.【强制】不得使用外键与级联,一切外键概念必须在应用层解决。
	说明:以学生和成绩的关系为例,学生表中的 student_id是主键,那么成绩表中的 student_id
	则为外键。如果更新学生表中的 student_id,同时触发成绩表中的 student_id 更新,即为
	级联更新。外键与级联更新适用于单机低并发,不适合分布式、高并发集群;级联更新是强阻
	塞,存在数据库更新风暴的风险;外键影响数据库的插入速度。
  • No labels