Project Reactor有条件地执行独立验证步骤

问题描述 投票:0回答:1

我无法弄清楚,如果没有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 reactive-programming project-reactor
1个回答
0
投票

在保持可读性的同时,如果没有其他方法,则无法执行此操作。在保持可读性的同时要做的一些选择包括使用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());
};
© www.soinside.com 2019 - 2024. All rights reserved.