领域Swift2:模型和领域模型类分离的最佳实践

领域Swift2:模型和领域模型类分离的最佳实践,swift2,realm,Swift2,Realm,我刚刚开始为Swift与Realm合作。在阅读了文档之后,我仍然有一些疑问 我最大的一个问题是,是否有将模型类与领域类分离的最佳实践 例如,在JavaMVC项目中,我们使用DAO类(数据访问对象类),它们负责与数据库层的通信。 我们相应的模型类只注入了dao对象,或者为此使用了服务类(如CRUD操作) 如果我有一个领域“模型”类,那么现在它似乎是一体的。但是在将对象持久化到数据库之后,在UI层中更改对象的属性会导致 '试图在写入事务外部修改对象-调用 首先在RLMRealm实例上开始WriteT

我刚刚开始为Swift与Realm合作。在阅读了文档之后,我仍然有一些疑问

我最大的一个问题是,是否有将模型类与领域类分离的最佳实践

例如,在JavaMVC项目中,我们使用DAO类(数据访问对象类),它们负责与数据库层的通信。 我们相应的模型类只注入了dao对象,或者为此使用了服务类(如CRUD操作)

如果我有一个领域“模型”类,那么现在它似乎是一体的。但是在将对象持久化到数据库之后,在UI层中更改对象的属性会导致

'试图在写入事务外部修改对象-调用 首先在RLMRealm实例上开始WriteTransaction。“

这让我回到了我最初的想法:这不应该在领域对象和模型对象中分开吗。或者在视图类中有“realm.write”进程可以吗

我在这方面做了一些研究,但结果非常不确定

在你的项目中,你是如何处理这个问题的。您是否有一些最佳实践或指导

非常感谢 John

官方(至少在iOS方面)没有将模型类逻辑从实际的领域对象子类中抽象出来的既定最佳实践。话虽如此,我过去肯定听说过一些应用程序,它们通过这种逻辑来支持多种类型的数据框架

如果我要这样做,我会为每个模型创建一个单独的对象类,实现我自己的API,了解如何获取/设置数据属性,并使领域对象成为这个对象的内部成员。然后,这个对象将作为我的应用程序逻辑和如何将数据保存到领域之间的通用接口。这样,如果我真的想交换数据框架,我可以简单地用一个新的数据对象替换我自己的数据对象,但要保持API的一致性


对于您发布的错误消息,为了确保数据完整性,您不能修改领域对象(UI线程或其他),除非它位于写事务中。也就是说,您可以封装该逻辑(即在当前线程上打开一个领域写事务)在这个抽象对象中非常容易。

0你现在应该问这个问题-我刚刚开始将领域数据库对象分离到它们自己的空间中,并创建与你的DAO等效的DAO,因此我的应用程序直接与DAO对话,它们调用适当的领域方法。大约一天前才开始,所以我会回来报告的……谢谢蒂姆。这对我帮助很大。你所描述的是我个人更喜欢的分层方式。干杯,JohnHi@TiM,你能解释一下让领域对象成为这个对象的内部成员是什么意思吗?如果你有时间的话,一个非常简单的例子也会很好!哇,这是个老问题!我的意思是,由于不能在写事务之外修改Realm
Object
实例,因此可以使用包装器类隔离特定于领域的逻辑。您将拥有一个与应用程序正常交互的通用模型对象,但该对象本身在内部保留等效的领域
object
,并单独执行所有领域逻辑。这里的目标是能够删除领域并插入另一个数据库引擎,而无需更改类的设计。:)@蒂姆:我从收集到的信息中得出了一些想法,但我仍然有一些疑问。“如果您愿意看一看,我打开了一个新问题。”蒂姆:好的,重读您的答案,我澄清了一个疑问。您正在为领域模型类的属性在包装器类中创建自己的getter和setter。因此,如果/当您必须实例化此领域对象的实例时,您是否直接执行该操作?还是通过包装器类?