常见问题

2021/7/20 javamavenspringcloud

提问之前,请先查阅下面的常见问题。

# 规范常见问题

# 代码不要使用行尾注释

  • 正例

    代码不要使用行尾注释,容易误编译

    image-20210720195949116或者image-20210720195955348

  • 反例

    字段属性、逻辑代码等都不要出现行尾注释。

    image-20210720200043044

# 枚举需要配置注释信息,以及枚举值要配置中英文国际化

  • 正例

    枚举要有注释,并且要配置中英文国际化

    image-20210720193340764

    image-20210720193351010

  • 反例

    不加注释,代码扫描时,会报缺少注释信息错误;不允许直接在value里面写中文,必须配置国际化

    image-20210720193407692

# 方法名、参数名、成员变量名和局部变量名必须要驼峰命名

  • 正例

    方法名、参数名、成员变量名和局部变量名应该用lowerCamelCase书写。

    image-20210720194852026

  • 反例

    像图中扫描出来的问题,变量名有带下划线的,有首字母大写的,都是不符合规范的。

    image-20210720194904566

    image-20210720194910701

# 常量命名应全部大写并以下划线分隔

  • 正例

    常量的命名应该要全部大写并以下划线分隔。

    image-20210720195420048

  • 反例

    像平时的开发中,有不加下划线、没有全部大小写、又有大小写结合着写的,都是不符合规范的。

    image-20210720195502586

    image-20210720195523798

# 接口方法必须使用javadoc注释

  • 正例

    Javadoc主要用于代码的注释规范性。

    image-20210721105019956

  • 反例

    使用行尾注释及不注释,都是不符合规范的,代码不易维护,别人看到这段代码,不知是何用处。

    image-20210721105032880

# 包名要小写

说明

包名应为小写字母组成。

  • 正例

    image-20210721111317268

  • 反例

    image-20210721111701331

# 针对暂无数据的返回类型,前端不需要提示错误信息

说明

针对返回的列表,比如产品的采购需求→采购需求→需求清单列表,不是分页的,没有数据时,后端会返回数据不存在,但是前端又不希望有提示,

这时候我们约定一种返回类型,这种返回类型的,前端都不会有错误提示,但是对于后端业务来说,我们还是success为false。

return ResultUtils.noData();

image-20210907181517370

# 开发常见问题

# 即使语句体只包含一条语句,也要加花括号

说明

后面不加{}时,就近原则,只控制第一句,大括号用于if、else、for、do和while语句,即使语句体只包含一条语句,也要加。

  • 反例

    image-20210721102641326

# Long类型的变量尾缀应使用大写L

说明

Java在变量赋值的时候,其中float、double、long数据类型变量,需要在赋值直接量后面分别添加f或F、d或D、l或L尾缀来说明,其中,long类型最好以大写L来添加尾缀,因为小写l容易和数字1混淆,这是Java语法规定,不添加尾缀很容易引起编译器报错,并且程序可读性也会变差。

  • 反例

    image-20210721102742822

# 在开关块中,每一种情况都应该通过break/return来完成

说明

在一个 switch 块内,每个 case 要通过 break/return 等来终止,在一个 switch 块内,都必须包含一个default 语句并且放在最后,即使它什么代码也没有。

  • 正例

    image-20210721104110801

  • 反例

    image-20210721104116148

# 应使用equals方法代替==

说明

包装器类应该通过equals方法而不是直接通过'=='符号进行比较。

  • 正例

    1654084732196

  • 反例

    image-20210721110634890

# 其他常见问题

# 魔法值在编码中是禁止的

说明

魔法数值使代码的可读性大大下降。而且,如果同样的数值多次出现时,到底这些数值是不是带有同样的含义呢,谁也说不清楚。另一方面,如果本来应该使用相同数值的地方,一旦用错了,也很难发现。因此, 我们应极力避免使用魔法数值。

解决办法:使用static final 定义常量或使用enum值。

  • 正例

    image-20210721105649089

  • 反例

    image-20210721105804651

# 必须设置注解Transactional的属性rollbackFor

说明

在实际开发中我们是希望发生任何异常都要发生回滚操作,spring的@Transactional注解可以很方便的开启事务,但是默认只在遇到运行时异常和Error时才会回滚,非运行时异常不回滚,即Exception的子类中,除了RuntimeException及其子类,其他的类默认不回滚,解决办法:在@Transactional 注解中设置rollbackFor 属性值。

即:@Transactional(rollbackFor = Exception.class)

  • 正例

    image-20210721110752524

  • 反例

    image-20210721110756369

# 基本注释不可少

类注释、方法注释、关键代码注释不可缺少,这是规范!要让之后的有志青年易读易维护,不然他们可能会抓狂。

  • 正例

    1654084127441

  • 反例

    1654084149933

# 读写数据库时,都要有相应的判断

读写数据库时,都要有相应的判断,不应该全都返回success,也不应该直接使用查询的结果,有了相应的判断,就能避免一些比较基础性的异常错误。

  • 正例

    写入:

    1654084392674

    读取:

    1654086143162

  • 反例

    写入:

    1654084491877

    读取:

    1654086158400

# 代码编写要清晰,比如多用反向判断,增加代码可读性

代码编写要清晰,比如多用反向判断,增加代码可读性

  • 正例

    1654084634523

  • 反例

    1654084655594

# constant包的重要性

①命名规则为Resp+模块名+Status:返回错误信息时,应该在constant包中创建返回参数信息类,并且配置中英文国际化;

②常量类:模块名+Constant。

  • 正例

    1654085035788

  • 反例

    1654085048641

# 代码设计方面,为了统计调多个接口,不允许!

为了做个统计,写了很多sql查询,代码设计不正确,这种操作是不被允许的。

  • 正例

    1654085220042

  • 反例

    1654085228370

# for循环嵌套多层,不允许!

当数据量达到数万条时多层嵌套的运行时间就会特别长,进而影响性能。

  • 正例

    1654085677603

  • 反例

    1654085690580

# for循环内调用接口,不允许!

多次查询数据库,会造成数据库压力过大,也会造成程序阻塞,可以使用批量查询。

  • 正例

    1654085736703

  • 反例

    1654085748223

# 常用工具类要学会善用,尽量不要自己写

常用工具类要学会善用,尽量不要自己写,避免不必要的bug。

  • 正例

    1654085912607

  • 反例

    1654085925635

工具类说明:

1654085965372

# 针对String类型的属性,sql中需要添加条件

当然,现在很多人都用MyBatis-Plus写法编写,但是也不排除有MyBatis写法的人,字符串类型的查询条件增加条件判断,否则有可能造成查询内容为空。

  • 正例

    1654086323872

  • 反例

    1654086332275