数据控制器应该返回NSManagedObjects还是NSObjects

时间:2015-04-18 13:23:29

标签: objective-c core-data architecture nsmanagedobject

我的应用中有几个数据控制器。每个数据控制器负责管理数据的某一部分。他们可以访问CoreData,处理NSManagedObject并根据调用者使用的线程使用NSMainQueueConcurrencyTypeNSPrivateQueueConcurrencyType队列NSManagedObjectContext来确保所有线程都是线程安全的数据控制器。

它的架构方式只有数据控制器才能了解CoreData的内容,如上下文,托管对象,获取请求等。

这意味着数据控制器不应返回NSManagedObject。首先要确保只能通过正确的上下文访问它们,这只能在数据控制器本身中使用,其次是强制只有数据控制器处理与CoreData相关的任何内容的体系结构。

但是数据控制器应该返回什么?创建NSObject的{​​{1}}副本是一个好主意,复制所有属性并返回该属性?这是有道理的,但在我看来,这不是理想的解决方案,甚至是不必要的。

有更好的方法吗?

1 个答案:

答案 0 :(得分:2)

在我看来,你已经在你的问题中给出了正确的答案:

  

它的架构方式只有数据控制器才能了解CoreData的内容,如上下文,托管对象,获取请求等。

您应该通过向程序的其余部分提供NSManagedObjects来避免破坏与Core-Data无关的设计。它独立于第三方框架 - 特别是持久性框架 - 是一种优秀且高度可测试的设计。因此请使用NSObject

还要记住,持久性框架可能会在程序的生命周期内发生变化。商业模式相反。


评论更新

要将NSManagedObject转换为NSObject,反之亦然,您必须编写自己的marshaller / converter类。有很多教程如何将NSManagedObject转换为NSDictionary包含。关系。

如果真的需要断层,你也必须自己动手。但是 - 作为一般的性能优化 - 应该是列表中的最后一个主题,如果您在生产中遇到性能问题,则只能列在您的列表中。