领域Swift模型是否分开?

我是新来的iOS和Swift的世界,我正在一个新的应用程序,我想使用Realm的持久性。 我的代码中已经有我的服务访问并填充HTTP API端点的实体。

现在我想坚持某些实体,并想要build议我是否应该为Real中的每个实体创build新的Realm特定模型,以便从Realm中读取和写入。 或者我应该把我现有的普通Swift实体转换成Realm实体。 起初,这感觉不对,因为我将通过Realm实体在我的应用程序周围,而不是在持久层。

然而,另一种select是,每次我读/写实体到Realm时,我都需要将它们从实体来回转换成Realm实体。

任何build议最好的办法呢?

谢谢

两种策略都很好,各有优缺点。

值对象+领域对象

  • ✅值对象是线程安全的
  • ✅值对象可以在任何地方进行变异,而不用担心副作用
  • ✅值对象可以被任意定义,并允许使用语言的全部可能性,这允许由对象持久性映射给出的解决方法约束
  • No️不会延迟加载,这意味着完整的对象层次结构必须加载到内存中
  • Can️不能expression周期
  • ❗️需要维护您的模型定义两次
  • Ne️需要逻辑从传输编码(如JSON)映射到Swift结构和从那些到领域对象

只使用Realm对象

  • ✅零拷贝,这意味着从他们读取更便宜
  • ✅Live,这意味着他们的数据始终是最新的
  • ✅从数据库中懒洋洋地加载:更less的磁盘读取
  • ✅可以表示周期和任意对象层次结构
  • ✅在一个地方定义你的模型
  • ✅如果您可以控制传输编码并且可以共享命名约定,则可以主要依赖由Real create(_:update:_)及其朋友使用的Realm集成的Foundation值types映射逻辑。
  • ✅支持KVO,可以轻松整合一些被动的编程框架
  • ❗️添加约束如何定义您的模型对象(一些语言的构造不直接支持作为枚举,现在需要解决方法)
  • Reference️引用types需要更多的关注突变以避免不良的副作用,此外,修改只能在写入事务中进行(应尽可能多地进行批处理)
  • Realm对象不是线程安全的

TL; DR

当你退出Realm Objects时,你会失去很多Realm特性,并且很难再重新实现它们。 根据您需要多less以及您的使用情况如何,您将购买高成本的线程安全。

从长远来看,我们正在努力使Realm对象更易于使用,并尝试消除它们的缺点,只要意识到这些对于做出明智的决定将会有所帮助。