首页 文章

为什么Reactor 3需要单声道类型?

提问于
浏览
1

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 回答

  • 6

    想想在非反应世界中会发生什么:我们可以决定让所有函数返回 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> ,但是当有多个项目或只有一个时,能够区分它更方便 .

相关问题