我无法弄清楚,如果没有if / else,如何执行此方法:
public Mono<Token> doAuthorization(InputDto dto) {
if (isXStepNeeded(dto)) {
return doXStep(dto)
.then(doYStep(dto.getRfid()));
} else {
return doYStep(dto.getRfid());
}
}
private boolean isXStepNeeded(InputDto dto) {
//simple non blocking check on the dto
}
private Mono<OtherDto> doXStep(InputDto dto) {
//checking something and returning Mono.error() if it fails
}
private Mono<Token> doYStep(String tokenUid) {
//...
}
您可以看到,X和Y步骤彼此独立。是否有一种不错的,易读的doAuthorization
编写方式,它不使用if / else?
在保持可读性的同时,如果没有其他方法,则无法执行此操作。在保持可读性的同时要做的一些选择包括使用Java 14中引入的“三元运算符”和新的“开关大小写”。
使用ternary operator将其减少到一行:
return isXStepNeeded(dto) ? doXStep(dto).then(doYStep(dto.getRfid())) : doYStep(dto.getRfid());
或使用新的开关盒:
return switch (Boolean.toString(isXStepNeeded(dto))) {
case "true" -> doXStep(dto).then(doYStep(dto.getRfid()));
default -> doYStep(dto.getRfid());
};