存储库MVP保存到列表

时间:2018-10-23 21:18:32

标签: java android kotlin mvp clean-architecture

我正在尝试了解MVP,RxJava,Dagger2,Retrofit,因此,我的问题是我正在关注this repository,这是真的吗?

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<...>

0 个答案:

没有答案