ios - Realm 架构模式

标签 ios swift mvvm realm

<分区>

我从 CoreData 迁移了我的应用程序,事情原来如此简单给我留下了深刻的印象。我可以删除很多代码:)

让我感到有点不舒服的一件事是 Realm 遍及我的应用程序,产生了很大的依赖性:我的应用程序有一个 MVVM 架构,如果模型是 Realm 所在的地方,我会感觉最好。

在迁移之后,我将 Result 和 List 对象发送到我的 View 模型。改用 [Type] 对象不是更好吗?

你怎么看?您如何使用 Realm 构建您的应用程序?

最佳答案

您必须自己决定将 Realm 作为依赖项是否会给体系结构带来太大的风险,但是有几个很好的理由说明您应该直接使用 Realm 对象/集合:

  1. Realm 不是基于 SQLite 构建的,也不是 ORM。因此,当您访问 Realm 对象或集合时,该数据是内存映射的,并且仅在访问时延迟加载。这意味着如果你想将一个 Result 转换成一个 Objects 的 Swift 数组,或者更糟糕的是将那些 Objects 的副本转换成一个不依赖于 Realm 的类,那么这将导致预先读取/复制 Result 中的所有数据,而不是 Realm 为您提供的高效方式。

  2. 默认情况下,Realm 实例会自动更新。这意味着通过直接使用 Realm ObjectResult,您可以将您的 View 或在您的案例中的 View 模型绑定(bind)到这些对象上的更改。 Realm 实例在更新时发送通知(relevant docs),允许您更新 View 模型,然后关闭此 View (例如,如果您有一个由 Result 支持的 TableView ,您可以在通知的 TableView 上触发 reloadData,因为 Result 实例现在将具有最新的对象)。或者,您也可以在特定的 Realm 对象上使用键值观察来响应其属性的变化,从而更新 View / View 模型 (relevant docs)。

希望这有助于塑造您对建筑的看法。在撰写本文时,我们正在研究对象级通知,这将支持进一步的数据绑定(bind)功能。您可以关注此here的进展.

关于ios - Realm 架构模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33347094/

相关文章:

ios - 禁用导航栏动画

ios - 使用 MapKit 时 Xcode 7.3 不会自动完成

ios - 如何,Xamarin iOS 中的 applicationDidBecomeActive?

wpf - RadBusyIndi​​cator不显示ViewModel的PRISM/MEF/WPF

wpf - 哪个是用于 WPF 的最佳或广泛使用的 MVVM 工具包?

objective-c - 当用户键入文本时为文本着色(iOS、Xcode)

swift - NSAttributedString 和表情符号 : the range I never set seems to be set

ios - UIView center 属性给出了意想不到的结果

objective-c - swift 3 : stringByReplacingCharactersInRange alternatives

android - viewModelScope 在 vi​​ewPager 中被取消