Зачем нужен моно тип в Reactor 3?

Reactor 3 имеет 2 основных типа данных, оба из которых являются реактивными издателями потоков.

  • reactor.core.publisher.Mono<T>
  • reactor.core.publisher.Flux<T>

Я понимаю разницу между Mono как потоком из 0 или 1 элементов и Flux как потоком из 0 или N элементов.

Поскольку Mono и Flush реализуют org.reactivestreams.Publisher<T> почему нам нужны оба типа, почему бы не использовать Flux для всего?

1 ответ

Решение

Подумайте о том, что происходит в нереактивном мире: мы могли бы решить вернуть все функции List<T>даже когда мы знаем, что они вернут только один элемент. Пример:

public List<T> findAll()     <-- looks ok

public List<T> findFirst()   <-- seems strange?

public T findFirst()         <-- better now?

Так почему же мы не всегда возвращаемся List<T>? потому что удобнее, что иногда мы используем List<T> а другие просто TТаким образом, пользователю функции легче понять, чего ожидать.

Теперь, если мы преобразуем эти примеры в реактивный мир, мы получим это:

public List<T> findAll()   -->   public Flux<T> findAll()

public T findFirst()       -->   public Mono<T> findFirst()

Конечно, мы всегда могли использовать Flux<T> как мы всегда могли использовать List<T>, но просто удобнее иметь возможность различать, когда есть несколько предметов или только один.

Другие вопросы по тегам