Java 8 是否最好在Mono<;对象>;
作为开发团队的一部分,我们希望构建一个非阻塞应用程序,因为我们正在使用SpringReactor 3构建我们的应用程序。因此,在使用project reactor时,我有一系列问题:Java 8 是否最好在Mono<;对象>;,java-8,functional-programming,reactive-programming,project-reactor,Java 8,Functional Programming,Reactive Programming,Project Reactor,作为开发团队的一部分,我们希望构建一个非阻塞应用程序,因为我们正在使用SpringReactor 3构建我们的应用程序。因此,在使用project reactor时,我有一系列问题: 在单个管道和Mono上使用多个平面图是否是一种良好的做法,例如,如果emp的所有细节都有效,则存在验证emp信息的场景: @Getter @Setter public class Employee { private long empId; private String userName;
Mono
上使用多个平面图是否是一种良好的做法,例如,如果emp的所有细节都有效,则存在验证emp信息的场景:
@Getter
@Setter
public class Employee {
private long empId;
private String userName;
private String password;
}
public class FlatMapExample{
public Mono<Emplyoee> doValidate(Emplyoee emp){
Mono.just(emp).flatMap(this::validateEmpId)
.flatMap(this::validateUserName)
.flatMap(this::validatePassword);
}
private Mono<Emplyoee> validateEmpId(Emplyoee e){
Mono.just(emp).flatMap(//here some check on empId)
}
private Mono<Emplyoee> validateUserName(Emplyoee e){
Mono.just(emp).flatMap(//here some check userName calling another method which is performing some extra checks like the format of username/ null or empty userName)
}
private Mono<Emplyoee> validatePassword(Emplyoee e){
Mono.just(emp).flatMap(//here some check to validate password by calling another method)
}
}
@Getter
@塞特
公营雇员{
私人长empId;
私有字符串用户名;
私有字符串密码;
}
公共类FlatMapExample{
公共环境管理计划(雇员环境管理计划){
Mono.just(emp.flatMap)(this::validateEmpId)
.flatMap(this::validateUserName)
.flatMap(this::validatePassword);
}
私人Mono validateEmpId(雇员e){
Mono.just(emp.flatMap)(//这里检查一下empId)
}
私人雇员姓名(雇员e){
Mono.just(emp.flatMap)(//这里一些check userName调用另一个方法,该方法正在执行一些额外的检查,如userName/null或空userName的格式)
}
私人密码(雇员e){
Mono.just(emp.flatMap)(//这里有些检查通过调用另一个方法来验证密码)
}
}
数据验证是关键点,所以我认为最好同步这个过程 此外,如果flatMap(this::validateEmpId)返回Mono.error(smth),您的下一个验证器将无法执行,因此您将无法返回完整的错误消息 这篇文章的作者在webflux(反应堆)项目中使用了,所以我相信在您的示例中,更好的方法是这样的:
public Mono<Emplyoee> doValidate(Emplyoee emp){
/*validate */
if(valid) {
return Mono.just(emp);
} else {
return Mono.error(err);
}
}
public Mono-doValidate(员工emp){
/*证实*/
如果(有效){
返回Mono.just(emp);
}否则{
返回Mono.error(err);
}
}
我认为您应该尝试简化验证api,例如:
public Mono<Void> doValidate(Emplyoee emp){
return validateEmpId(emp.getId())
.then(validateUserName(emp.getUserName()))
.then(validatePassword(emp);
}
private Mono<Void> validateEmpId(long id){
// here some check on empId
// if check ok return Mono.empty()
// else return Mono.error(new YourException(...))
}
private Mono<Void> validateUserName(String userName){
...
}
private Mono<Void> validatePassword(Emplyoee emp){
...
}
public Mono-doValidate(员工emp){
返回validateEmpId(emp.getId())
.then(validateUserName(emp.getUserName()))
.然后(验证密码(emp);
}
专用Mono validateEmpId(长id){
//这里有一些关于empId的检查
//如果选中ok,则返回Mono.empty()
//else返回Mono.error(新的YourException(…)
}
私有Mono validateUserName(字符串用户名){
...
}
私人密码(雇员emp){
...
}
不再使用Mono.just(emp).flatMap