公司培训-Java编码规范
最近在省公司参加研发练兵,学习到一些编码规范,以下是我印象比较深的。
1.命名一定要使用英文含义,不要使用中文拼音首字母,例如数字乡村,命名为szxc,这种命名方法是大错特错,具体原因如下:
①可读性差:使用拼音缩写或直接用拼音,命名的变量、函数名等很难被其他人理解,特别是如果阅读者的母语不是汉语。此外,由于拼音单词的语音相似,容易产生歧义。
②维护困难:使用拼音命名的代码在后期维护时可能会出现问题。由于使用拼音命名的代码不易理解,维护者可能需要花费更多的时间和精力去理解代码的含义,甚至需要进行代码重构。
③可靠性问题:拼音单词可能会存在多音字、同音字等问题,这会导致代码中的变量、函数名出现歧义或错误。
再举个真实例子,我们研发练兵中有人之前没做过开发,所以在给数据库表命名时,用xxx_biao来命名,就非常不规范。
可以使用DigitalVillage或DigitalCountry命名,即使母语不是英语,也易读和理解。
2.①类名需要使用大驼峰命名法(UpperCamelCase)风格。例,VillagerPostService。
②方法名、参数名、成员变量、局部变量需要使用小驼峰命名法(lowerCamelCase)。例,createTime。
③测试方法名、常量、枚举名称需要使用蛇形命名法(snake_case)。例,提交成功的枚举类型SUBMIT_SUCCESS。
原因如下:
①可读性好。驼峰命名法使得代码可读性更好,每个单词之间有明确的分割,不同的单词之间可以更好地区分。
②符合约定。驼峰命名法是一种广泛应用的命名规范,许多编程语言和框架都采用此命名法,符合约定可以减少代码的混乱。
③易于理解。驼峰命名法可以让别人更容易地理解你的代码,尤其是在协作开发中,可以减少沟通成本。
④可扩展性强。驼峰命名法可以很好地支持后续代码的扩展,增加新的功能时不需要对现有的代码进行大规模修改。
3.sql语句中尽量不要使⽤复杂的函数运算,也不要在语句中执行计算,能在java逻辑中处理的要用代码处理。
尽量不使用case when等复杂函数。
①数据库特别是mysql,虽然提供了这些⽅法,但是如果访问量特别的⼤,数据内容特别的多,很容易造成速度变慢,甚⾄数据库的崩溃。越⼤型的项⽬越不要⽤这些复杂的sql语句,尽量将所有数据都查出来,在代码中进⾏处理。可以通过EXPLAIN查看执行计划,优化查询。
②如果某个字段进行了运算,且设置了索引,执行sql语句中后会导致索引失效。
4.不要使用魔法值
魔法值是Java代码中直接出现、未经预先定义的数值(出现的很突兀、莫名其妙,需要结合上下文才可能理解)。
举个例子:
if ("200".equals(successCode)) { //200就是一个魔法值 System.out.println("执行成功") } else if ("401".equals(errorCode)) { // 401也是一个魔法值 System.out.println("连接接口失败") }
if (type==0) { //0是一个魔法值 System.out.println("这是近一周的数据") } else if (type==1) { // 1是一个魔法值 System.out.println("这是近一个月的数据") }
使用魔法值的坏处:
1.可维护性差:不方便以后的维护更新,修改变量的值时需要修改多处,可能还会不小心修改了其他不该修改的常量。
2.代码可读性差:在阅读代码时,不能快速理解魔法值的数值表示的含义,还要去花费不必要的时间去理解。
解决魔法值的方法:
一般使用静态常量或定义枚举类
①静态变量:仅在当前类中使用或在方法内部使用的值,可以通过定义静态常量的方式来避免魔法值的出现。
(注意:静态常量定义时约定名称的所有字母都要大写,以此表示该标识为不变常量)
public final static SUCCESS = 200; public final static ERROR = 401;
②枚举类enum:枚举类能够约束静态常量的定义规范,提供统一格式的静态常量值
public enum MesssgeEnum { SUCCESS("200","执行成功"), ERROR("401","连接接口失败"); private String code; private String message; MesssgeEnum(String code, String message) { this.code = code; this.message = message; } public String getCode() { return code; } public String getMessage() { return message; } }
5.service实现类中的业务方法要使用try catch捕获异常,并且需要加上事务注解,进行事务回滚。
捕获异常后,需要将错误信息抛给全局异常处理,并使用包装类封装,返回给用户的信息一定是封装好的信息,例如“查询错误”,“系统异常”等,不能将捕获的编译错误返回给用户。
6.接口层的接口url一般使用复数,且多个组合单词组合中间用中划线连接。
@GetMapping("/pie-charts")
7.接口方法必须使用javadoc注释
8.充分利用swagger接口调试,并与前端进行协作。
参考文章: