Одна из вещей, которую я пытаюсь обернуть вокруг себя с помощью реактивных программ, - это отсутствие результатов.
Допустим, у меня был API, который по выбору извлекал последний заказ для пользователя.Я хочу оставить поведение, если не найден пользователь до звонящего.В простой старой Java я бы написал что-то вроде:
Optional<Order> getLatestOrder(int userId) { ... }
В webflux я пытаюсь обернуть голову, если эквивалентная функция должна возвращать Mono<Optional<Order>>
или Mono<Order>
.
Если я добавлю getLatestOrder()
к реактивному потоку, он может прекратиться, если я испущу пустой моно.Также странно делать что-то вроде:
getLatestOrder().defaultIfEmpty(new Order());
, поскольку теперь это похоже на значение часового, которое указывает на то, что оно не существует.
Есть лируководство по шаблону с использованием Mono
и Optional
?Есть ли правильный способ полностью отказаться от Optional
, если вы действительно хотите выразить что-то, чего нет?