Сохранение MVP репозитория в List - PullRequest
0 голосов
/ 24 октября 2018

Я пытаюсь узнать о 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<...>?

...