我正在研究如何使用 MVP、RxJava2 和改造来开发 Android 应用程序。
在我的演示者中,代码如下:
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");
}
});
}
Retrofit 接口定义如下:
@GET("/fooURL")
Single<List<Data>> getDataList();
存储库只是
public Single<List<Data>> getDataList() {
return retrofitApi.getDataList();
}
它工作正常。问题如下:我的意图是仅当本地数据不可用时才在db中获取网络数据。
考虑到这一点,调度程序在演示者中管理是否正确?还是应该在存储库中管理它们?
我的猜测是 Presenter 是正确的地方,因为它创建了一个线程,因此存储库可以按顺序执行它的工作(获取 db,如果没有,然后获取网络/缓存;在获取数据的任何地方返回数据),并且当提供数据时,在 Consumer 的 accept 方法中通知视图。
这是对的吗?还是应该以不同的方式完成?
另一点是:我如何使用 Mockito 存储库进行测试?我的意思是 dataModelRepository.getDataList() 方法?不知道如何为单个对象做任何断言......
提前致谢!