- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我编写的大多数使用 Core Data 的应用程序都遵循通用模式 - 模型类继承自 NSManagedObject
并通过插入到 NSManagedObjectContext
中创建。
由于我正在评估一个新的副项目的几个不同的持久性选项,我很想找到一种方法将核心数据实现与其余代码分开。例如,我可能会改用使用协议(protocol)定义的 DataStore
的概念。它要求任何实现都提供某些功能。例如 getCars
、addCar
和 deleteCar
。应用不需要知道 getCars
是否从 Core Data、Realm、本地文件等中获取。
我在 DataStore
的核心数据实现中遇到的一个直接问题是,一旦 Car
作为实体添加到数据模型中,我无法创建 Car
对象,除非通过指定的初始化程序,它需要插入一个上下文。这显然不会成功,因为重点是将 NSManagedObjectContext
等的任何知识与各种 View Controller 和其他类分开。
我正在考虑为我所有的核心数据实体使用其他名称(例如 CDCar
),然后添加一堆代码用于映射到/从 CDCar
和汽车
。或者可能为 Car
制定一个协议(protocol)以供应用程序中的一般用途,CDCar
将遵守该协议(protocol)。有更通用的方法吗?
最佳答案
添加并行实体会增加很多复杂性,以至于不清楚解耦是否会产生净 yield 。
我要做的是在 DataStore
类中包含工厂方法以按需创建实例。它不会使用非DataStore
代码直接创建Car
,而是调用DataStore
上的新createCar
方法。 DataStore
会做任何它需要做的事情来创建一个有效的实例并返回结果。这可能意味着您不需要 addCar
,因为您不会在 DataStore
之外创建实例。
关于ios - 解耦核心数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43279222/
我是一名优秀的程序员,十分优秀!