我正在使用Clean Architecture开发一个Android应用程序,并将其迁移到RxJava 2.x。我需要向soap服务发送一些网络请求,因此我在domain模块中定义了api接口:
public interface SiginterApi {
Observable<User> login(String user, String password);
...
Observable<List<Campaign>> getCampaigns(List<Long> campaignIds);
}
我已经阅读过,网络请求应该使用"Flowable
",因为它是一个“冷可观测对象”,可以管理背压。另一方面,我知道请求的结果将是成功(带有响应)还是错误,因此我不知道是否应该使用Flowable
、Single
或者甚至是Observable
。
此外,我的数据库访问方式如下:
public interface UserRepository extends Repository {
Observable<Void> saveUser(String username, String hashedPassword, boolean logged, User user);
...
Observable<User> findUser(String username, String hashedPassword);
}
我不知道在saveUser
方法中应该使用 Completable
/Flowable
/Observable
还是在findUser
方法中应该使用Single
/Flowable
/Observable
。
Single
是网络请求的更好选择,因为它只有一个响应,但正如您可以在这个问题和许多其他关于RxJava 2.x的博客中所读到的那样,网络和数据库访问器应该使用Flowable
来实现。 - Pablo Alonso GonzálezObservable
(Single
/Completable
) 还是Flowable
的关键在于是否需要背压控制。这与源类型无关(冷源、网络/数据库访问器...)。 - Pablo Alonso GonzálezSingle
)或零(Completable
)个值,那么你不需要处理背压。如果你有一个例如与服务器的开放连接,并持续从它接收数据,那么你应该使用Flowable
来处理可能数据到达得比你处理速度更快的情况。 - npace