Я вынужден переключиться на реактивное программирование (и в короткие сроки), используя 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);
Другими словами, я вынужден использовать эту конвейерную вещь ВЕЗДЕ, чтобы поддерживать реактивность или делать какие-то шаги императивным способом, таким как разворачивание объекта, работа с ним и его обертывание - это нормально?
Я знаю, что мой вопрос кажется глупым, но у меня нет общей картины, чтение книг о нем еще не очень помогло, пожалуйста, будьте нежны со мной. :)