【问题标题】:Should data controllers return NSManagedObjects or NSObjects数据控制器是否应该返回 N 个对象的 NSManagedObject
【发布时间】:2015-04-20 19:08:36
【问题描述】:

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

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

这意味着数据控制器不应返回NSManagedObjects。首先确保它们只能通过正确的上下文访问,这仅在数据控制器本身中可用,其次是强制实施只有数据控制器处理与 CoreData 相关的任何事情的架构。

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

有没有更好的办法?

【问题讨论】:

    标签: objective-c core-data architecture nsmanagedobject


    【解决方案1】:

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

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

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

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


    评论更新

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

    如果确实需要故障排除,您也必须自己解决。但这 - 作为一般的性能优化 - 应该是您列表中的最后一个主题,并且只有在您在生产中遇到性能问题时才会出现在您的列表中。

    【讨论】:

    • 你是对的,但是考虑到可能有一个完整的子结构附加到 NSManagedObject 属性或甚至一些错误的属性?
    猜你喜欢
    • 2017-09-10
    • 2019-10-15
    • 2011-07-01
    • 1970-01-01
    • 2016-01-30
    • 2015-04-29
    • 2012-08-06
    • 2016-10-26
    • 2020-05-24
    相关资源
    最近更新 更多