sha*_*agi 11 mvp android caching
我正在开发遵循MVP架构的项目.通常,当我使用recyclerView时,我的演示者控制适配器数据.但是现在我需要使用来自缓存(或类似缓存的数据)的数据制作回收器适配器,回收器的大小不依赖于缓存大小,所以我通过HashMap进行缓存,其中密钥是 - 回收器的位置,如果有一个项目然后数据显示地图,否则空行与"添加事件"btn.我无法意识到这种结构中缓存的位置 - 模型(Dao或类似CacheManager)或适配器.
缓存的想法如下:我有一些类型的事件存储在数据库中,每个事件修改都在db中更改它 - 所以缓存也必须更新.
主要问题是:在哪里保留此缓存并将其加载到适配器,如何使其与数据库更改保持同步.
PS我也尝试使用RX,所以如果可以用它来解决 - 试试会很有趣.
PPS如果它是Repository模式是解决方法 - 欢迎.前一段时间阅读它.
你的问题听起来并不像是与RecyclerView.Adapter
- 实际上你不应该尝试在你的内部解决它Adapter
:适配器的责任是充当数据和视图之间的桥梁(或“适配器”;-))成分。赋予它更多的责任会使其变得不可与其他东西互换Adapter
实现互换的东西(你不希望这样!)。
您可能应该找到一种干净的方法来抽象数据持久性。内存缓存应该进入该抽象。您提到了存储库模式,恕我直言,这将是不错的选择。
您的架构应该大致如下所示:
adapter -> repository -> |-> cache
|-> database
Run Code Online (Sandbox Code Playgroud)
存储库结合了数据访问逻辑(您的 DAO)和缓存处理(您的 CacheManager)。存储库总是首先检查缓存,然后从数据库中获取数据。如果获取非缓存数据,它还会更新缓存。此外,它还注册数据库的更新。一旦数据库通知更改的数据,存储库就有机会更新缓存和/或将通知传播到视图。重要的是存储库的界面隐藏了所有这些逻辑;它仅提供对数据的访问。
然后,您需要找到一种方法使您的适配器与您的存储库一起工作。我建议安卓的Loader
机制。通过这种方式,您可以免费获得异步加载和正确的生命周期处理。这也很好地解耦了适配器和存储库。
如果您需要一些关于如何应用存储库模式的灵感,请查看googlesamples/android-architecture Github。清洁架构分支很适合您。
附带说明:尝试找到数据的真实(唯一)键。使用数据列表中的位置通常是一个坏主意,并且根据数据的结构会导致视图中出现奇怪的副作用。
归档时间: |
|
查看次数: |
1196 次 |
最近记录: |