为什么 Reactor 3 需要 Mono 类型?
Why is the Mono type needed in 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?
想想在非响应式世界中会发生什么:我们可以决定将所有函数 return List<T>
,即使我们知道它们只会 return 一个元素.示例:
public List<T> findAll() <-- looks ok
public List<T> findFirst() <-- seems strange?
public T findFirst() <-- better now?
那么我们为什么不总是 return List<T>
?因为有时我们使用 List<T>
和其他人只是 T
更方便,这样函数的用户更容易理解期望的内容。
现在,如果我们将这些示例转换为反应世界,我们会得到:
public List<T> findAll() --> public Flux<T> findAll()
public T findFirst() --> public Mono<T> findFirst()
当然,我们总是可以使用 Flux<T>
,因为我们总是可以使用 List<T>
,但是当有多个项目或只有一个项目时能够区分更方便。
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?
想想在非响应式世界中会发生什么:我们可以决定将所有函数 return List<T>
,即使我们知道它们只会 return 一个元素.示例:
public List<T> findAll() <-- looks ok
public List<T> findFirst() <-- seems strange?
public T findFirst() <-- better now?
那么我们为什么不总是 return List<T>
?因为有时我们使用 List<T>
和其他人只是 T
更方便,这样函数的用户更容易理解期望的内容。
现在,如果我们将这些示例转换为反应世界,我们会得到:
public List<T> findAll() --> public Flux<T> findAll()
public T findFirst() --> public Mono<T> findFirst()
当然,我们总是可以使用 Flux<T>
,因为我们总是可以使用 List<T>
,但是当有多个项目或只有一个项目时能够区分更方便。