gpt4 book ai didi

java - 如何确保多个模型对象实例之间的一致性

转载 作者:太空宇宙 更新时间:2023-11-04 12:09:53 25 4
gpt4 key购买 nike

背景

这是我在开发 Android 应用程序时不断遇到的一个问题。假设我的应用程序允许用户“关注”电视节目。我的 TVShow 模型类如下:

public class TVShow {
String title;
String[] show_cast;
boolean currently_airing = true;
boolean following = false;
long nextEpisodeTime;
String genre;
}

我有一个存储数百个电视节目的 SQL 数据库。这很有用,因为我可以利用详细查询来根据特定信息选择节目。我遇到的问题是当我有多个表示同一节目的 TVShow 实例时。

示例

假设我的数据库中有电视节目“行尸走肉”,并且我通过 SQL 查询创建了一个 TVShow 对象。该对象实例将被称为TVShow#1。我决定“关注”这个节目,因此我设置了 TVShow#1.following = true。在我的应用程序的其他地方,我查询当前正在播放的节目列表,其中“行尸走肉”是其中的一部分。将为该列表创建一个名为 TVShow#2TVShow 新实例。这里的问题是,我有两个代表“行尸走肉”的 TVShow 对象,TVShow#1TVShow#2,但它们的 following 值不同。这将导致我的应用程序的整个逻辑出现问题,因为代表同一电视节目的所有 TVShow 实例之间不存在一致性。

我的糟糕解决方法

将其扩展到一堆对象实例和更复杂的字段和逻辑,这就是我目前所处的情况。我通过在应用程序启动时将所有 SQL 数据加载到内存(通常是 ArrayList 或 HashMap)并仅查询这些 Java 对象而不是 SQL 数据库来缓解这种情况。这种解决方案效率低下且不方便,而 SQL 查询确实可以提供帮助。我希望我的例子不会太令人困惑。如果我可以澄清或提供更多信息,我很乐意。请告诉我是否可以采取更好的措施来确保同一模型对象的多个实例之间的一致性。

最佳答案

我用于解决此问题的解决方案是基于 RxJava 的,但是无需 Rx 也可以实现。

这个想法是您“订阅”数据库查询中的数据。每次对数据库的写入都会影响查询所涉及的一个表,然后查询就会重新运行,并且您会获得一组新的数据。

这样,当 TVShow1 保存到数据库时,生成 TVShow2 的查询将重新运行,并且您将获得最新版本的数据。

如果您使用 Rx,有两个库可以为您完成所有这些操作:

StorIO
sqlbrite

如果您不使用 Rx,则 Realm其更改适配器具有类似的功能。

你终于可以自己动手了。这将涉及使用一个单例来注册您的查询,并将其链接到它们正在读取的表。每次执行写入操作时,您都会让此类知道哪些表已更改,并且它会重新运行您的查询。

关于java - 如何确保多个模型对象实例之间的一致性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39947770/

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