No.1 布尔表达式长且复杂的重构解法
参考来源 https://testing.googleblog.com/2024/04/isbooleantoolongandcomplex.html
if (condition1 && condition2 && (condition3 || condition4)) {
// do some thing
}
步骤一:将条件提取到一个命名比较易读的变量中
A first step toward improving this is to extract the condition into a well-named variable
boolean flag = condition1 && condition2 && (condition3 || condition4);
if (flag) {}
步骤二:将详细信息分组到中间布尔值中
try to group the details into intermediate Booleans that provide meaningful abstractions
boolean flag1 = condition1;
boolean flag2 = condition2;
boolean flag3 = condition3 || condition4;
boolean flag = flag1 && flag2 && flag3
if (flag) {}
其他方式:将逻辑提取到单独的方法中
public boolean isFlag() {
if (!condition1) {
return false;
}
if (!condition2) {
return false;
}
return condition3 || condition4;
}
No.2 在列表处理中以管道代替循环
List<String> idList = Lists.newArrayList();
for (OrderDTO orderDTO : orderDTOList) {
if (condition1) {
continue;
}
if (condition2) {
continue;
}
String orderId = orderDTO.getId();
if (orderId == null) {
continue;
}
result.add(orderId);
}
idList = orderDTOList.stream()
.filter(condition1)
.filter(condition2)
.map(OrderDTO::getId)
.filter(Objects::nonNull)
.collect(Collectors.toList());
No.3 组合方法模式
优点:模块化和可重用
assemblyUserInfo(req);
assemblyOrderDTO(req);
assemblyOrderItemDTOs(req);
assemblyExtendFields(req);
No.4 异常处理
抛出异常很容易,处理它们很困难
减少异常处理造成的最佳方法是减少处理异常类型的数量,最佳方法是无错误
以 String.substring 方法为例
No.5 Java8 Stream 中的 map()函数和 peek()函数
map()函数:将流中的每个元素都映射为另一个不同的值(应用于流的每一个元素)
peek()函数:对流中的元素进行某种形式的强化或者调试
No.6 Reduce Nesting, Reduce Complexity
尽量让条件语句块短小
卫语句
网友评论