Ak používate Repository
vzor a načítanie z lokálneho a vzdialeného, má zmysel mať lokálny návrat Maybe<T>
a diaľkový návrat Single<T>
v RxJava2
?
odpovede:
3 pre odpoveď č. 1Rozhodne! Môžete vytvoriť medzipamäť disku / pamäte a Maybe
a ak je prázdny, prepnutím sa vrátite z Single
sieťový zdroj. Je to čistejšie a logickejšie, pretože DB môže alebo nemusí nič vrátiť a sieťová odpoveď je väčšinou vždy Single. Vaša konečná odpoveď by mohla byť a Single
.
Príkladom by bolo:
@Override
public Single<E> get(long id) {
return fetchFromDb(id)
.switchIfEmpty(fetchFromNetwork(id))
.subscribeOn(schedulerProvider.io());
}
Už som to použil ako predtým. V skutočnosti je to veľmi ovplyvnené New York Times, Uložiť knižnicu
0 pre odpoveď č. 2
Áno, mal som rovnaký prípad, keď som aplikoval rxjava2 na vzor úložiska. Nechcel som previesť celú svoju retrofitnú službu z vrátenia Single na Možná,
Na vašu otázku stačí použiť toMaybe ()
Môj príklad vzoru úložiska Rxjava2 je nasledovný:
protected Maybe<Foo> loadDataFromCache() {
Foo foo = cachedDataHelper.getFoo();
return foo != null ? Maybe.just(foo) : Maybe.empty();
}
public Single<Foo> loadDataFromMultipleRepos () {
Maybe<Foo> apiCallObservable = new FooCallRx().getAPIObservable(context).toMaybe();
Maybe<Foo> cacheObservable = loadDataFromCache();
return Maybe.concat(cacheObservable, apiCallObservable)
.toSingle();
}