应该数据控制器 return NSManagedObject of N Objects
Should data controllers return NSManagedObjects or NSObjects
我的应用程序中有多个数据控制器。每个数据控制者负责管理数据的特定部分。他们可以访问 CoreData,处理 NSManagedObject
s 并通过使用 NSMainQueueConcurrencyType
或 NSPrivateQueueConcurrencyType
队列确保所有线程安全 NSManagedObjectContext
s 取决于调用者使用的线程数据控制器。
它的架构方式只有数据控制器知道 CoreData 的内容,例如上下文、托管对象、获取请求等。
这意味着 NSManagedObject
s 不应被数据控制者 returned。首先要确保它们只能通过正确的上下文访问,这仅在数据控制器本身中可用,其次要强制执行只有数据控制器才能处理与 CoreData 相关的任何内容的架构。
但是数据控制者应该做什么 return?创建 NSManagedObject
的 NSObject
副本,复制所有属性和 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
,包括。关系。
如果真的需要故障,你也必须自己动手。但是这个 - 作为一般的性能优化 - 应该是你列表中的最后一个主题,并且只有当你 运行 在生产中遇到性能问题时才会出现在你的列表中。
我的应用程序中有多个数据控制器。每个数据控制者负责管理数据的特定部分。他们可以访问 CoreData,处理 NSManagedObject
s 并通过使用 NSMainQueueConcurrencyType
或 NSPrivateQueueConcurrencyType
队列确保所有线程安全 NSManagedObjectContext
s 取决于调用者使用的线程数据控制器。
它的架构方式只有数据控制器知道 CoreData 的内容,例如上下文、托管对象、获取请求等。
这意味着 NSManagedObject
s 不应被数据控制者 returned。首先要确保它们只能通过正确的上下文访问,这仅在数据控制器本身中可用,其次要强制执行只有数据控制器才能处理与 CoreData 相关的任何内容的架构。
但是数据控制者应该做什么 return?创建 NSManagedObject
的 NSObject
副本,复制所有属性和 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
,包括。关系。
如果真的需要故障,你也必须自己动手。但是这个 - 作为一般的性能优化 - 应该是你列表中的最后一个主题,并且只有当你 运行 在生产中遇到性能问题时才会出现在你的列表中。