gpt4 book ai didi

android - MVP 适配器数据缓存

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:47:12 25 4
gpt4 key购买 nike

我正在按照 MVP 架构开发项目。通常,当我使用 recyclerView 时,我的演示者控制适配器数据。但是现在我需要用缓存(或缓存之类的东西)中的数据制作回收器适配器,回收器的大小不取决于缓存大小,所以我通过 HashMap 创建缓存,其中关键是 - 回收器的位置,如果有一个项目映射然后显示数据,否则空行带有“添加事件”btn。而且我不知道在这种结构中缓存的位置 - 模型(Dao 或 CacheManager 之类的东西)或在适配器中。

缓存的想法如下:我有一些类型的事件存储在数据库中,每个事件修改都会在数据库中更改它 - 所以缓存也必须更新。

主要问题是:在哪里保存这个缓存并将它加载到适配器,我怎样才能使它与数据库更改保持同步。

附言我也尝试使用 RX,所以如果它可以用它解决 - 尝试会很有趣。

P.P.S 如果 Repository 模式是解决问题的方法 - 欢迎。前段时间读过。

最佳答案

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

您可能应该找到一种简洁的方法来抽象您的数据持久性。内存缓存应该进入那个抽象。您提到了存储库模式,恕我直言,这将是不错的选择。

您的架构应该大致如下所示:

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

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

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

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

旁注:尝试找到数据的真实(唯一)键。使用数据列表中的位置通常不是一个好主意,并且根据数据的结构会在 View 中产生奇怪的副作用。

关于android - MVP 适配器数据缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43535937/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com