【发布时间】:2017-04-07 13:19:28
【问题描述】:
我编写的大多数使用 Core Data 的应用程序都遵循通用模式 - 模型类继承自 NSManagedObject,并通过插入到 NSManagedObjectContext 中创建。
由于我正在评估一个新的副项目的几个不同的持久性选项,我很想找到一种方法将核心数据实现与其余代码分开。例如,我可能会改用DataStore 的概念,它是使用协议定义的。它要求任何实现都提供某些功能。例如getCars、addCar 和deleteCar。应用程序不需要知道 getCars 是否从 Core Data、Realm、本地文件等获取。
我在使用DataStore 的核心数据实现时遇到的一个直接问题是,一旦将Car 作为实体添加到数据模型中,我就无法创建Car 对象除了通过指定的初始化程序,它期望插入一个上下文。这显然行不通,因为重点是将NSManagedObjectContext 等的任何知识与各种视图控制器和其他类分开。
我正在考虑为我的所有核心数据实体使用其他名称(例如CDCar),然后添加一堆代码来映射到CDCar 和Car。或者也许为Car 制定一个协议,以便在应用程序中通用,CDCar 将遵守该协议。有没有更常见的方法来解决这个问题?
【问题讨论】:
-
请记住,通过使用额外的层,例如您的
Car对象,您将失去最强大的CoreData 机制,即faulting特别是关系船故障。在获取Car时,您还需要获取Engine实体、Owner实体等。您必须为所有相关对象构建图。 -
谢谢,是的,我没有考虑过。可能会破坏交易。