命名
容易使人误解的命名
作者提到了filter是一个容易让人误解的单词,一句filter(year->year < 2021),是把2021年以前的都去掉了,还是保留下来了2021年以前的年份。
其实这个在Java开发中不会造成太大的误解,因为jdk官方选的就是保留2021年以前的年份,即使有人自己定义了一个叫filter...的方法,大家也会普遍觉得会保留下来复合条件的
布尔值命名
这个好像之前已经讨论过了,和反射相关的地方,如果是is开头就有可能出问题。我的习惯是只有DB里面的字段名会取is开头,Java里面都不会
get
get的表意就是简单的拿取,如果涉及了复杂的计算取名最好叫calculate之类的,不要用get
set以前踩过一个坑,因为我们的vo里面如果有List,基本上都会在定义的同时附上默认值 = new ArrayList,并且不暴露set方法,避免出现空指针。
直到有一次我把controller里面的请求入参也这么做了,结果字段塞不上去值
后来想过写成下面的样子,又觉得没必要就放弃了
public class MyVo {
private List<String> strings = new ArrayList<>();
public void setStrings(List<String> strings) {
this.strings = new ArrayList<>();
if (CollectionUtils.isNotEmpty(strings)) {
this.strings.addAll(strings);
}
}
}
审美
在需要的时候列对齐
details = request.get("details");
location = request.get("location");
phone = reques.get("phone");
email = reques.get("email");
url = reques.get("url");
这一点其实我不是很认同,我觉得出现这种情形的地方,它的逻辑都不是我们最应该关心的,基本都是一些不同vo字段的取值塞值。我们更关心的是这个vo从什么变过来的,所有的字段都塞好值之后又去干了些什么。
当然我自己写SQL的时候是一定要format好select ... as ...,所有的as一定要对其,在子查询多的时候看起来非常方便
声明按块组织起来
尤其是在一个类里面定义很多个常量和变量的时候。我自己写代码如果变量多了也会这么做
public class Helper{
// const
private static final String CONST_ONE = "CONST1";
private static final String CONST_TWO = "CONST2";
// param
private Criteria criteria;
// global var
private String string;
}
我们的代码库里ReportHeler里就定义了非常非常多的变量,从Color的常量到cf的取值,所有的内容都分好了组
网友评论