现在我想坚持一些实体,并且想要建议我是否应该为每个实体创建新的领域特定的模型,以便从领域读写.或者我应该将我现有的所有简单的Swift实体转换为国家实体.起初,我感觉到错误,因为我将在我的应用程序中传递Realm Entities,而不是在持久层中.
但是,另一种选择是,每当我读/写实体到Realm时,我需要将它们从Entities转换为Realm Entities.
任何关于最佳方法的建议?
谢谢
解决方法
值对象领域对象
✅值对象是线程安全的
>✅值对象可以在任何地方变异,而不用担心副作用
>✅值对象可以是任意定义的,并允许使用语言的全部可能性,这允许通过对象持久性映射给出的解决方法约束
>❗️否懒加载,这意味着必须将完整的对象层次结构加载到内存中
>❗️不能表达周期
>❗️需要维护你的模型定义两次
>❗️需要逻辑从传输编码(例如JSON)到Swift Structs和从那些到Realm对象映射
仅使用Realm对象
>✅零拷贝,这意味着从他们那里读书是较便宜的
>✅Live,这意味着他们的数据总是最新的
>✅从数据库中轻松加载:磁盘读取少
✅可以表达循环和任意对象层次结构
>✅在一个地方定义你的模型
>✅如果您可以控制传输编码,并且可以共享命名约定,则可以主要依赖于由create(_:update:_)及其朋友使用的Realm的集成的基础值类型映射逻辑.
>✅支持KVO,可以轻松地与一些反应式编程框架集成
>❗️添加约束到你如何定义你的模型对象(一些语言结构不直接支持枚举,并需要解决办法)
参考类型需要更多地关注突变以避免不必要的副作用,另外修改只能在写入事务中进行(应该尽可能大的批处理)
>❗❗域对象不是线程安全的
TL; DR
当您选择退出境界对象时,您将失去许多领域的功能,并且将难以自己重新实施.根据您需要的数量以及使用情况如何,您将以高成本购买线程安全.
从长远来看,我们正在努力使Realm对象更容易使用,并尝试消除其缺点,因此长期以来意识到这些对于做出明智的决定将有所帮助.