最佳实践:在框架中公开 NSManagedObject

Posted

技术标签:

【中文标题】最佳实践:在框架中公开 NSManagedObject【英文标题】:Best practice: exposing NSManagedObject in framework 【发布时间】:2015-07-21 13:44:01 【问题描述】:

我正在 ios 中创建一个包含即时消息功能的库/框架,使用 CoreData(加上 MagicalRecord 和 Mogenerator)来存储消息和对话。

我主要有两个NSManagedObject 类:MessageConversation。例如在Message 中,我有一些创建实体的类方法(比如[Message createMessage] 和一些查询表的实例方法(比如[message getLatestMessages])。

我的问题是,在我的框架 MessageConversation(以及它们的所有公共方法)中公开公开多少是一种好的做法。 我应该采取不同的方法,比如用其他类包装实体吗? 然而,数据库上下文将始终对框架的用户隐藏。

【问题讨论】:

【参考方案1】:

不要包装它们,它们已经足够抽象了。只需公开它们,因为它们只是数据对象。

您应该有一个入口点来检索数据和保存数据。暴露给外部应用程序的某种形式的 DataController。

【讨论】:

NSManagedObject 或其NSManagedObjectContext 被释放时,你如何处理? 处理任何其他被释放对象的方式相同。如果它不应该被释放,那么你就有一个错误。 我的意思是,有没有一种简单的方法可以将 NSManagedObject 的“副本”从其原始上下文中分离出来。让我们想象一个函数getObject 为这个函数创建一个新的 MOC(没有保留它的引用),执行一个查询并返回结果。当 MOC 将被释放时,返回对象的属性将全部等于 nil。除了返回NSDictionary 或创建特定的NSObject 实例之外,是否有一种惯用的方法来防止这种情况发生? 如果对象在存储中,那么任何上下文都可以检索另一个副本,因此您可以建立另一个上下文并将对象提取到该上下文的空间中。您还可以使用 KVC 获取对象中值的字典副本。你想解决什么问题?也许我没有从您的问题中看到更好的方法。

以上是关于最佳实践:在框架中公开 NSManagedObject的主要内容,如果未能解决你的问题,请参考以下文章

Swift NSFetchedResultsController 嵌套对象的最佳实践

NPM 包:最佳实践和公开多个导入路径

<Docker + Bamboo + Saltstack持续集最佳实践 > 本周三晚在线公开课

使用Android中的内容提供程序公开多个表的最佳实践

在 ios 框架项目中存储本地数据的最佳实践

n 分层架构中的实体框架 - 要遵循的最佳实践?