/ / Repository pattern in RxJava2 - android, repository-pattern, rx-java2

Vzor úložiska v RxJava2 - android, repository-pattern, rx-java2

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ď č. 1

Rozhodne! 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();
}