开发一个好项目:六、创建数据源,创建数据仓库

前一篇文章:开发一个好项目:五、创建数据源,创建网络数据Service和网络数据源 框架地址 dileber android框架 希望大家能多多star一下

如下是BaseRepository 包含有三个常用属性

localDataSource 本地源
remoteDataSource 网络源
cache 缓存 缓存的开启,与项目代码的的状态有关系,如果 BaseConfiger 类中的bug设置为true 缓存则不开启,当设置为false的时候,缓存将开启。refCache 则是是否刷新缓存的标识
还有三个方法
refOver 刷新结束
refStart 刷新开始 每次调用完后必须再调用结束。
isRefCache 是否刷新

    protected T1 localDataSource = null;

    protected T2 remoteDataSource = null;

    protected Map<String,Object> cache = null;
    /**
     * 是否刷新缓存
     */
    private boolean refCache = false;

public void refOver(){
        refCache = false;
    }

    public void refStart(){
        refCache = true;
    }

    public boolean isRefCache(){
        return refCache;
    }

如下便是SysRepository 主要代码
如果想要做内存缓存的话(缓存会提高效率)

if(cache==null){
            cache = new HashMap<>();
        }
        cache.put(LAUNCH,launchModel);

如果想做文件缓存的话,就会采用两种,一种是,shareprefer,另外一种是数据库,当然数据库的缓存和shareprefer的缓存都在本地数据源处理了,我们只需要做的是,如何取到。 这个的应用场景很常见(我举例子说明一下:微博类应用,你打开微博应用的时候有时候不联网,微博应用出来的是你最后一次浏览的数据。)

如何实现呢?就要在数据仓库里进行操作了:

如下代码逻辑解释:如果本地数据源里有数据则从本地数据源获取数据,如果没有的话,才从网络获取。当从网络获取到的时候,再把本地数据源的数据更新,或者添加。你的应用在没有联网的时候就也可以获取数据了,当然如果要是想刷新数据的话就要用到 :
refOver 刷新结束
refStart 刷新开始
两个方法了

localDataSource.getLaunch(new BaseDataSource.BaseCallback<LaunchModel>() {
                @Override
                public void onSuccess(LaunchModel launchModel) {
                    saveLaunch(launchModel);
                    callback.onSuccess(launchModel);
                }

                @Override
                public void onFailure(DataSourceException e) {
                    remoteDataSource.getLaunch(new BaseCallback<LaunchModel>() {
                        @Override
                        public void onSuccess(LaunchModel launchModel) {
                            saveLaunch(launchModel);
                            callback.onSuccess(launchModel);
                        }

                        @Override
                        public void onFailure(DataSourceException e) {
                            callback.onFailure(e);
                        }
                    });
                }
            });
        }

总代码:

public class SysRepository extends BaseRepository<SysLocalDataSource,SysRemoteDataSource> implements SysDataSource{

    protected SysRepository(SysLocalDataSource localDataSource, SysRemoteDataSource remoteDataSource) {
        super(localDataSource, remoteDataSource);
    }

    public static volatile SysRepository instance;

    public static SysRepository getInstance() {
        if (instance == null) {
            synchronized (SysRepository.class) {
                if (instance == null) {
                    instance = new SysRepository(SysLocalDataSource.getInstance(), SysRemoteDataSource.getInstance());
                }
            }
        }
        return instance;
    }

    @Override
    public void launch(BaseDataSource.BaseCallback<LaunchWrapper> callback) {
        remoteDataSource.launch(callback);
    }


    private static final String LAUNCH = "launch";

    @Override
    public void saveLaunch(LaunchModel launchModel) {
        if(cache==null){
            cache = new HashMap<>();
        }
        cache.put(LAUNCH,launchModel);
        localDataSource.saveLaunch(launchModel);
    }

    @Override
    public void getLaunch(final BaseDataSource.BaseCallback<LaunchModel> callback) {
        if(cache!=null&&cache.containsKey(LAUNCH)){
            callback.onSuccess((LaunchModel) cache.get(LAUNCH));
        }else{
            localDataSource.getLaunch(new BaseDataSource.BaseCallback<LaunchModel>() {
                @Override
                public void onSuccess(LaunchModel launchModel) {
                    saveLaunch(launchModel);
                    callback.onSuccess(launchModel);
                }

                @Override
                public void onFailure(DataSourceException e) {
                    remoteDataSource.getLaunch(new BaseCallback<LaunchModel>() {
                        @Override
                        public void onSuccess(LaunchModel launchModel) {
                            saveLaunch(launchModel);
                            callback.onSuccess(launchModel);
                        }

                        @Override
                        public void onFailure(DataSourceException e) {
                            callback.onFailure(e);
                        }
                    });
                }
            });
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

二蛋和他的大花

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值