使用RxJava实现存储库模式

时间:2016-04-03 08:04:19

标签: java android rx-java

我正试图找到一种更好的方法来实现Android中RxJava中的存储库模式。

这是我到目前为止所做的:(从here获取一些代码)

public Subscription getData(Observer<Data> observer, boolean refresh) {
    Subscription sub = null;

    Data cached = getCachedData();
    if(cached != null) {
        observer.onNext(cached);
        if(refresh) {
            sub = requestNetwork().subscribe(observer);
        } else {
            observer.onCompleted();
        }
    } else {
        sub = requestNetwork().subscribe(observer);
    }

    return sub;
}

基本上它会检查是否存储了缓存数据,如果没有,它会发出网络请求。它还有refresh布尔参数强制它始终发出网络请求。

问题(或不是)是,此函数的调用者需要调用它将接收Subscription而不是Observable,我不能再链接。

有没有办法让函数返回Observable但仍然有存储库模式?

1 个答案:

答案 0 :(得分:1)

感谢akarnokd将我指向Dan Lew的this article

我的最终代码:

public Observable<Data> getData(boolean refresh) {
    Observable<Data> obs = Observable.concat(getCache(), requestNetwork());
    if(!refresh) {
        obs = obs.first(data -> data != null);
    }
    return obs;
}