我编写的大多数使用核心数据的应用程序都遵循共同的模式--模型类继承自NSManagedObject
,并通过插入到NSManagedObjectContext
中创建。
由于我正在评估一个新的侧项目中的几个不同的持久性选项,所以我希望找到一种方法将核心数据实现与代码的其余部分分离开来。例如,我可以使用使用协议定义的DataStore
的概念。它要求任何实现都提供特定的功能。例如,getCars
、addCar
和deleteCar
。应用程序不需要知道getCars
是否从核心数据、领域、本地文件等中提取。
我在DataStore
的核心数据实现中遇到的一个直接问题是,一旦Car
作为实体添加到数据模型中,我就不能创建一个Car
对象,除非通过指定的初始化器,它需要插入一个上下文。这显然是行不通的,因为重点是将NSManagedObjectContext
等方面的任何知识从各种视图控制器和其他类中分离出来。
我正在考虑为我的所有核心数据实体(例如CDCar
)使用其他名称,然后添加一堆代码来映射到/从CDCar
和Car
。或者可能为Car
制定一个协议,以便在应用程序中通用,而CDCar
将遵循该协议。是否有更普遍的方法来解决这个问题?
发布于 2017-04-07 15:07:29
添加一个并行实体会增加许多复杂性,以至于不清楚解耦是否是一个净好处。
我要做的是在DataStore
类中包括工厂方法,以便根据需要创建实例。与非DataStore
代码直接创建Car
不同,它将在DataStore
上调用一个新的createCar
方法。DataStore
做它需要做的任何事情来创建一个有效的实例并返回结果。这可能意味着您不需要addCar
,因为您不会在DataStore
之外创建实例。
https://stackoverflow.com/questions/43279222
复制相似问题