android – MVP适配器数据缓存

我正在开发MVP架构之后的项目.通常,当我使用recyclelerView时,我的演示者控制适配器数据.但是现在我需要使用缓存中的数据(或类似缓存)的回收器适配器,回收器的大小取决于缓存大小,所以我通过HashMap进行缓存,其中的关键是 – 回收器的位置,如果有一个项目地图然后数据显示,否则空行与“添加事件”btn.而且我不能意识到在这样的结构中的缓存的位置 – 模型(Dao或类似CacheManager)或Adapter中.

缓存的想法如下:我有一些类型的事件存储在数据库中,每个事件修改都会在db中更改 – 因此缓存也必须被更新.

主要问题是:在哪里保留此缓存并将其加载到适配器,我如何保持与数据库更改同步.

附:我也试图使用RX,所以如果它可以解决它 – 将是非常有趣的尝试.

P.P.S如果它的Repository模式是解决的方式 – 欢迎.有一段时间读过它.

解决方法

你的问题听起来不像RecyclerView.Adapter – 实际上你不应该尝试在你的适配器中解决它:适配器的责任是充当桥梁(或“适配器”;-))之间您的数据和视图组件.给它更多的责任将会变成与其他适配器实现不可互换的东西(你不想要这个!).

你应该可以找到一个干净的方法来抽象你的数据持久性.内存中缓存应该进入该抽象.你提到了仓库模式,这将是IMHO的不错选择.

你的架构大致如下:

adapter -> repository -> |-> cache
                         |-> database

存储库结合了数据访问逻辑(您的DAO)和缓存处理(您的CacheManager).存储库将始终首先检查缓存,然后从数据库获取数据.如果提取非缓存数据,它还会更新缓存.此外,它注册数据库的更新.一旦数据库通知更改的数据,存储库就有机会更新缓存和/或将通知传播到视图.重要的部分是存储库的接口隐藏了所有这些逻辑;它只提供对数据的访问.

然后,您需要找到一种使您的适配器与您的存储库一起使用的方法.我建议Android的Loader机制.通过这种方式,您可以免费获得异步加载和正确的生命周期处理.此外,这很好地解耦适配器和存储库.

如果您需要一些关于如何应用存储库模式的灵感,请查看googlesamples/android-architecture Github. Clean Architecture branch可能适合您.

在附注:尝试找到您的数据的真实(唯一)键.使用数据列表中的位置通常是一个坏主意,根据数据的结构将导致视图中的奇怪的副作用.

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...