我的应用中有几个数据控制器。每个数据控制器负责管理数据的某一部分。他们可以访问CoreData,处理NSManagedObject
并根据调用者使用的线程使用NSMainQueueConcurrencyType
或NSPrivateQueueConcurrencyType
队列NSManagedObjectContext
来确保所有线程都是线程安全的数据控制器。
它的架构方式只有数据控制器才能了解CoreData的内容,如上下文,托管对象,获取请求等。
这意味着数据控制器不应返回NSManagedObject
。首先要确保只能通过正确的上下文访问它们,这只能在数据控制器本身中使用,其次是强制只有数据控制器处理与CoreData相关的任何内容的体系结构。
但是数据控制器应该返回什么?创建NSObject
的{{1}}副本是一个好主意,复制所有属性并返回该属性?这是有道理的,但在我看来,这不是理想的解决方案,甚至是不必要的。
有更好的方法吗?
答案 0 :(得分:2)
在我看来,你已经在你的问题中给出了正确的答案:
它的架构方式只有数据控制器才能了解CoreData的内容,如上下文,托管对象,获取请求等。
您应该通过向程序的其余部分提供NSManagedObjects
来避免破坏与Core-Data无关的设计。它独立于第三方框架 - 特别是持久性框架 - 是一种优秀且高度可测试的设计。因此请使用NSObject
。
还要记住,持久性框架可能会在程序的生命周期内发生变化。商业模式相反。
评论更新
要将NSManagedObject
转换为NSObject
,反之亦然,您必须编写自己的marshaller / converter类。有很多教程如何将NSManagedObject
转换为NSDictionary
包含。关系。
如果真的需要断层,你也必须自己动手。但是 - 作为一般的性能优化 - 应该是列表中的最后一个主题,如果您在生产中遇到性能问题,则只能列在您的列表中。