我刚刚开始使用Realm for Swift。阅读完文档后,我仍然记得几个问号。
我最大的一个是,如果有一个从Realm类中分离Model类的最佳实践。
例如,在Java MVC项目中,我们使用了DAO类(数据访问对象类),它们负责与数据库层的通信。 我们相应的模型类只注入了dao对象,或者我们使用了服务类(如CRUD操作)。
如果我是一个领域“模型”类,现在看起来似乎是一切。但是在将对象持久化到数据库之后,更改UI-Layer中对象的属性会导致
'尝试修改写入事务之外的对象 - 调用 首先在RLMRealm实例上使用beginWriteTransaction。'
这让我回到了我的初期:不应该在Realm对象和模型对象中分开。或者可以让#34; realm.write" View-Classes中的进程呢?
我对此进行了一些研究,但结果非常有效。
您如何在项目中处理此问题。你有某种最佳实践或指导吗?
非常感谢提前 约翰
答案 0 :(得分:4)
正式地说,(至少在iOS方面),没有建立最佳实践来抽象模型类逻辑远离实际的Realm Object子类。话虽如此,我肯定听说过过去做过这种逻辑的应用程序,以支持多种类型的数据框架。
如果我这样做,我会为每个模型创建一个单独的对象类,实现我自己的API如何获取/设置数据属性,并使Realm对象成为该对象的内部成员。然后,此对象将充当我的应用程序逻辑与如何将该数据保存到Realm之间的通用接口。这样,如果我确实想要更换数据框架,我可以简单地用新的数据对象替换我自己的数据对象,但保持API一致。
对于您发布的错误消息,为了确保数据完整性,您不能修改Realm对象(UI线程或其他),除非它在写入事务中。话虽这么说,你可以在该抽象对象中很容易地封装那个逻辑(即在当前线程上打开一个Realm写事务)。