公司培训-Java编码规范

发布时间 2023-11-23 10:04:43作者: 睡觉不困

最近在省公司参加研发练兵,学习到一些编码规范,以下是我印象比较深的。

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接口调试,并与前端进行协作。

 

 

 

 

 

参考文章:

Java魔法值问题、解决方法_java 魔法变量

service层事务与try/catch的关系_事务和try catch

【精选】Javadoc(文档注释)详解_javadoc注释