gpt4 book ai didi

android - 如何使用 Realm "live"对象并保持数据库层与其他层(业务、UI 等)解耦?

转载 作者:行者123 更新时间:2023-11-29 14:45:24 27 4
gpt4 key购买 nike

我正在玩 Realm for Android。

我喜欢自动更新对象的想法,但我对它的软件架构有顾虑。

我已经看到许多提议的架构都指定了一个层来处理数据/数据库访问,理想情况下,更高层不会知道有关数据库实现的细节。这将有助于可维护性、模块化等。

当你使用 Realm 对象时,如果你想利用它们的自动更新属性,我能想到的最常见的方法是将这些对象放在 Activity/Fragment 代码中。现在让我们假设用户刚刚在屏幕上编辑了数据(由引擎盖下的 Realm 对象表示)并正在保存这些编辑。如果你调用这个对象的setter,那实际上是一个数据库操作,你需要一个事务。通过在 Activity/fragment 代码上创建数据库事务,架构会分崩离析,因为您让 UI/业务层了解数据库实现细节。

我的问题是:如何以不损害架构的方式利用 Realm 自动更新对象?

旁注:我在最近的一个应用程序中使用了 Realm,对于每个查询,我们必须将结果复制到非托管对象,以便我们可以将它们发送到 UI/业务层。我认为这不是最好的策略,因为我们无法充分利用 Realm。

最佳答案

经过一番研究,我得出的结论是,将 Realm 集成到应用程序中确实需要做出重大选择:安全集成 x 深度集成。

安全集成

在这里,您会将 Realm 与其余的应用代码隔离开来。为此,您将无法使用 Realm 的自动更新/零副本。相反,您将拥有非托管副本,以确保在访问对象的任何地方,您都不会遇到不同线程访问相同对象的问题。这样测试更容易。

深度整合

在这里,您将充分发挥 Realm 的潜力,在请求时延迟加载数据。缺点是代码的其他层会知道 Realm,因为它们需要确保托管对象不会被不同的线程访问。如果您不启动新应用,此选项可能涉及大量重构,但会带来零复制方法的性能优势。

我的回答基于这些文章:https://medium.com/@Viraj.Tank/realm-integration-in-android-best-practices-449919d25f2f#.ms3nenq0mhttps://medium.com/@Viraj.Tank/deep-integration-of-realm-in-android-production-code-part-2-with-mvp-4cf44ab6289d#.qq4p12mtw

关于android - 如何使用 Realm "live"对象并保持数据库层与其他层(业务、UI 等)解耦?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40384249/

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