Каков эффективный/правильный способ перемещения нескольких объектов в реактор?JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Каков эффективный/правильный способ перемещения нескольких объектов в реактор?

Сообщение Anonymous »

Я новичок в реактивном программировании, и чтобы освоиться, я пытаюсь создать пример, близкий к реальному.
Когда вы видите учебные пособия по реакторам, они показывают вам очень простые примеры, например.

Код: Выделить всё

return userRepository.findById(1);
или что-то вроде работы с потоком: разорвите строку «коричневая лисичка», найдите уникальные буквы и т. д. Но в основном эти руководства посвящены одному объекту, и, к сожалению, я не могу найти никаких направляющих линий. или учебник, в котором показаны параллельные примеры ввода одного и того же кода сначала в императивном порядке, а затем в реактивном, поэтому я вижу, что многие новички в реактивном программировании сталкиваются с множеством проблем с обучением.
но Я хочу сказать, что в реальных приложениях мы имеем дело с несколькими объектами, как показано ниже. код, который я написал в реакторе. Приношу извинения за плохой код, я все еще учусь.

Код: Выделить всё

public Mono response(ServerRequest serverRequest) {

return
Mono.just(new UserRequest())
.map(userRequest -> {
Optional name = serverRequest.queryParam("name");
if (name.isPresent() && !name.get().isEmpty()) {
userRequest.setName(name.get());
return userRequest;
}
throw new RuntimeException("Invalid name");
})
.map(userRequest -> {
Optional email = serverRequest.queryParam("email");
if (email.isPresent() && !email.get().isEmpty()) {
userRequest.setEmail(email.get());
return userRequest;
}
throw new RuntimeException("Invalid email");
})
.map(userRequest -> {
userRequest.setUuid(UUID.randomUUID().toString());
return userRequest;
})
.flatMap(userRequest ->
userRepository
.findByEmail(userRequest.getEmail())
.switchIfEmpty(Mono.error(new RuntimeException("User not found")))
.map(user -> Tuples.of(userRequest, user))
)
.map(tuple -> {
String cookiePrefix = tuple.getT2().getCode() + tuple.getT1().getUuid();
return Tuples.of(tuple.getT1(), tuple.getT2(), cookiePrefix);
})
//Some more chaining here.
.flatMap(tuple ->
ServerResponse
.ok()
.cookie(ResponseCookie.from(tuple.getT3(), tuple.getT2().getRating()).build())
.bodyValue("Welcome")
);

}
рассмотрите приведенный выше код: сначала я начал с объекта UserRequest, чтобы сопоставить строку запроса в этом объекте.
затем мне нужны некоторые данные из базы данных и так далее, реактивная цепочка продолжает работать.Теперь рассмотрим
  • объект UserRequest из первого метода цепочки и
  • документ пользователя, полученный из базы данных
    >тогда я сделаю гораздо больше операций, но в конце цепочки мне нужны оба этих объекта для обработки окончательного ответа.
    Единственный способ добиться того, что я нашел в Google, - это Tuple.
    но после этого код выглядит более грязным, поскольку в каждое следующее действие, которое мне нужно сделать

Код: Выделить всё

tuple.getT()

Код: Выделить всё

tuple.getT2()
И наконец, я хотел бы спросить, правильный ли это путь, или я что-то здесь упускаю. Потому что я узнал одну вещь в реактивном режиме: данные не передаются больше, чем в императивном порядке в середине логики, которую мы получили. О, мне нужна еще одна переменная/объект, поэтому я определяю ее сверху и использую ее, но в реактивном режиме после 5-го или 6-го оператора, когда разработчик понимает ох, мне тоже нужен этот объект, который я создал во 2-м операторе, затем мне нужно вернуться и передать его в цепочке, чтобы попасть в мой 5-й или 6-й оператор, это правильный способ сделать это.

Подробнее здесь: https://stackoverflow.com/questions/627 ... in-reactor
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»