Я пытаюсь узнать о MVP, RxJava, Dagger2, Retrofit, поэтому мой вопрос: я слежу за этим за этим репозиторием , и мой вопрос: действительно ли это хороший подход?
public class MoviesRepository implements Repository {
private MoviesApiService moviesApiService;
private List<Result> results;
private long lastTimestamp;
private static final long CACHE_LIFETIME = 20 * 1000;
public MoviesRepository(MoviesApiService mService){
this.moviesApiService = mService;
this.lastTimestamp = System.currentTimeMillis();
this.results = new ArrayList<>();
}
public boolean isUpdated(){
return (System.currentTimeMillis() - lastTimestamp) < CACHE_LIFETIME;
}
@Override
public Observable<Result> getResultFromNetwork() {
Observable<TopMoviesRated> topMoviesRatedObservable = moviesApiService.getTopMoviesRated(1)
/*.concatWith(moviesApiService.getTopMoviesRated(2))
.concatWith(moviesApiService.getTopMoviesRated(3))*/;
return topMoviesRatedObservable
.concatMap(new Function<TopMoviesRated, Observable<Result>>() {
@Override
public Observable<Result> apply(TopMoviesRated topMoviesRated) {
return Observable.fromIterable(topMoviesRated.getResults());
}
}).doOnNext(new Consumer<Result>() {
@Override
public void accept(Result result) {
results.add(result);
}
});
}
@Override
public Observable<Result> getResultFromCache() {
if (isUpdated()){
return Observable.fromIterable(results);
}else {
lastTimestamp = System.currentTimeMillis();
results.clear();
return Observable.empty();
}
}
@Override
public Observable<Result> getResultData() {
return getResultFromCache().switchIfEmpty(getResultFromNetwork());
}
}
Кто-то отсюда сказал мне, что этот способ скопировать его в List<>
не очень хороший способ сделать это, поэтому не могли бы вы порекомендовать мне один лучший способ?
Примечание. Мой вызов API - Single<Response>
, поэтому я должен изменить интерфейс репозитория на Single<...>
?