RxJava 2.x: Должен ли я использовать Flowable или Single / Completable?

Я разрабатываю приложение для Android, используя «Чистую архитектуру», и я переношу его на RxJava 2.x. Я должен сделать некоторые сетевые запросы для мыльной службы, поэтому я определил интерфейс 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); } 

Я не знаю, следует ли использовать метод Completable / Flowable / Observable в методе saveUser и Single / Flowable / Observable в методе findUser .

Solutions Collecting From Web of "RxJava 2.x: Должен ли я использовать Flowable или Single / Completable?"

Противодавление – это то, что вы получаете, когда источник Observable испускает элементы быстрее, чем Subscriber может их использовать. Чаще всего это проблема с горячими наблюдаемыми, а не с холодными , как ваши сетевые запросы.

Я думаю, вы должны использовать Completable вместо Observable<Void> в вашем методе saveUser и использовать Single для всех мест, где вы следуете за шаблоном запроса / ответа или ввода / вывода. Observable должен использоваться, когда вы действительно хотите непрерывный поток событий.

Противодавление возникает, когда Observable излучает предметы быстрее, чем оператор или абонент могут их потреблять .

Зная, что противодавление не является проблемой в вашем случае, так как ваш Observable будет излучать только один элемент, поэтому Flowable не является хорошим кандидатом.

Поэтому реальный вопрос заключается в том, чтобы использовать Completable или Observable для saveUser и Single или Observable для findUser и здесь, поскольку для простоты и ясности вашего API ожидается только один результат (успех или неудача), вы должны окончательно использовать Completable / Single В противном случае будет трудно понять, что будет выбрано только одно значение, которое может ввести в заблуждение пользователей API.