有两个抽象的,Observable和Single,区分它们和理解何时使用哪一个是很重要的。就像数据结构一样,一个大小并不适合全部。您应该在以下场景中使用Single:
操作必须具有某个特定值或异常。例如,调用web服务总是会导致来自外部服务器的响应或某种异常。
在你的问题领域里没有所谓的“流”;使用Observable 将会误导人。
Observable太重量级了,你会发现在你的特定问题中,Single的速度更快。
另一方面,在这些情况下,你应该更喜欢Observable:
您对某些事件(消息、GUI事件)进行建模,这些事件根据定义发生了几次,也可能是无限的。
或者完全相反,你期望在完成之前有值出现或者不出现。
后一种情况很有趣。您是否觉得在某些存储库(即Repository)中调用findById(int)方法返回 Single<Record>
,而不是 Record或Observable< Record>,这样更有意义呢?嗯,这听起来很合理:我们通过ID查找一个条目(这表明只有一个这样的Record)。然而,并不能保证我们提供的每个ID都有一个记录。因此,这个方法在技术上可以不返回任何东西,建模为null,Optional<Record>或Observable<Record>,它们完全可以处理空流,然后是完成的通知。Single 呢?它必须具有单个值(即Record)或异常。如果您想用异常来建模一个非现有记录,那么这就是您的设计选择,但这通常被认为是一个糟糕的实践。确定给定ID的Record不存是否是一个真正的异常的情况,这并不是存储库层的责任。