应该数据控制器 return NSManagedObject of N Objects

Should data controllers return NSManagedObjects or NSObjects

我的应用程序中有多个数据控制器。每个数据控制者负责管理数据的特定部分。他们可以访问 CoreData,处理 NSManagedObjects 并通过使用 NSMainQueueConcurrencyTypeNSPrivateQueueConcurrencyType 队列确保所有线程安全 NSManagedObjectContexts 取决于调用者使用的线程数据控制器。

它的架构方式只有数据控制器知道 CoreData 的内容,例如上下文、托管对象、获取请求等。

这意味着 NSManagedObjects 不应被数据控制者 returned。首先要确保它们只能通过正确的上下文访问,这仅在数据控制器本身中可用,其次要强制执行只有数据控制器才能处理与 CoreData 相关的任何内容的架构。

但是数据控制者应该做什么 return?创建 NSManagedObjectNSObject 副本,复制所有属性和 return 是个好主意吗?这是有道理的,但在我看来,这不是理想的解决方案,甚至是不必要的。

有没有更好的方法?

我认为您已经在问题中给出了正确答案:

It’s architected in a way that only the data controllers know about CoreData stuff like contexts, managed objects, fetch requests etc.

您应该通过向程序的其余部分提供 [​​=10=] 来避免破坏与核心数据无关的设计。独立于第三方框架(尤其是持久性框架)是一种良好且高度可测试的设计。因此选择 NSObject

另请记住,持久性框架可能会在程序的整个生命周期内发生变化。商业模式更是如此。


评论更新

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

如果真的需要故障,你也必须自己动手。但是这个 - 作为一般的性能优化 - 应该是你列表中的最后一个主题,并且只有当你 运行 在生产中遇到性能问题时才会出现在你的列表中。