1.单个方法参数不可超过5个。
2.单个方法行数不可超过60。
3.单个类行数不可超过2000。
4.命名需贴合语意。
5.方法中断言避免以下头重脚轻的场景:
public String handlePerson(Person person) { if (!checkPerson(person)) { ... ... ... ... return person.getName(); } return null; } 推荐写法: public boolean handlePerson(String name) { if (checkPerson(person)) { return null; } ... ... ... ... return person.getName(); } 循环中同理。
6.调用外部服务,需新建proxy类,并封装外部服务的逻辑,解耦外部服务。
7.调用mapper,需新建repository类,原因同上。
8.在分层结构中,严格按照层级职责编码,避免向上跨层调用,例如service层调controller层。
9.业务中的类型,状态等字段需提供与数据库设计匹配的枚举类。
10.避免代码中出现魔术值,可定义变量或包装类。
11.需多写注释,核心逻辑、抽象方法必须注释。
两种注释写法: 类属性,方法和类的注释: /** * 这是类属性,方法和类的注释. * */ 行注释: // 这是行注释.
12.避免代码复制粘贴,重复代码需重构,don't repeat yourself。
13.对象比较避免用==(事实相等,引用地址比较),用equals(逻辑相等,比较hashcode),equals尽量把常量或非空值放前面(null safe)。
14.避免循环套循环做条件查找:
例如查找人的省份:
for (Person person : personList) {
for (Province province : provinceList) {
if (province.getCode().equals(person.getProvinceCode())) {
System.out.println(province.getName());
}
}
}
推荐写法:
Map<String,String> provinceMap = provinceList.stream().collect(Collectors.toMap((i) -> i.getCode(), (i) -> i.getName(), (i1, i2) -> i2));
for (Person person : personList) {
System.out.println(provinceMap.get(person.getProvinceCode()));
}