我被迫转换到响应式编程(并且时间紧迫),使用WebFlux,但我很难理解它。可能是因为缺乏示例或因为我从未进行过函数式编程。
无论如何,我的问题是在哪里使用Mono/Flux,在哪里可以使用普通对象?例如,我的控制器正在等待@Valid User对象,那应该是@Valid Mono还是类似于Mono<@Valid User>的东西?如果说只是一个User对象,我将其传递给我的服务层,并且我想在保存到响应式MongoDb之前对密码进行编码,那么我应该写:
User.setPassword(...);
return reactiveMongoDbRepository.save(user); //returns Mono<User> which is returned by the Controller to the View
或者应该是这样的:
return Mono.just(user).map.flatmap(setPasswordSomewhereInThisHardToFollowChain).then.whatever.doOnSuccess(reactiveMongoDbRepository::save);
换句话说,我是否被迫在任何地方都使用这个“管道”来保持反应性,或者像解开对象、操作它,然后再包装回去这样的步骤是可以的?
我知道我的问题似乎很傻,但我完全没有整体概念,阅读相关书籍也没有真正帮助我,所以请对我温柔点。 :)