Я выясняю, как разработать приложение для Android, используя MVP, RxJava2 и модификацию.
В моем ведущем вот код:
public void loadData() {
compositeDisposable.dataModelRepository.getDataList().subscribeOn(Schedulers.io())
.observeOn(mainScheduler).subscribe(new Consumer<List<Data>>() {
@Override
public void accept(List<Data> dataList) throws Exception {
if (!dataList.isEmpty())
view.displayData(dataList);
else
view.displayEmpty();
}
}, new Consumer<Throwable>() {
@Override
public void accept(Throwable throwable) throws Exception {
System.out.println(throwable.toString());
view.displayError("boooom");
}
});
}
Интерфейс модернизации был определен следующим образом:
@GET("/fooURL")
Single<List<Data>> getDataList();
И репозиторий просто
public Single<List<Data>> getDataList() {
return retrofitApi.getDataList();
}
И это работает нормально. Вопрос заключается в следующем: я намерен получать сетевые данные только тогда, когда данные недоступны локально, в БД.
Имея это в виду, правильно ли, что планировщики управляются в презентере? Или они должны управляться в репозитории?
Я предполагаю, что презентер — это правильное место, так как он создает поток, чтобы репозиторий мог выполнять свои действия последовательно (извлекать БД, если ничего, затем извлекать сеть/кэш; возвращать данные, где бы они ни были извлечены), и когда данные предоставлены, уведомить представление внутри метода accept Потребителя.
Это правильно? Или это надо делать по-другому?
Другой момент: как я могу протестировать репозиторий Mockito? Я имею в виду метод dataModelRepository.getDataList()? Не уверен, как сделать любое утверждение для отдельных объектов...
Заранее спасибо!