核心数据:对象操作(良好实践)
Posted
技术标签:
【中文标题】核心数据:对象操作(良好实践)【英文标题】:Core Data : object manipulation (good practice) 【发布时间】:2013-04-22 13:56:27 【问题描述】:核心数据对于操纵模型来说并非微不足道。
在我使用 Core Data 之前,我使用了一个简单的 sqlite3 数据库并操作我分配的对象并修改我想要的方式。
但是对于 Core Data,如果我修改一个实体或删除我创建它的上下文......这对于我的应用程序的协调来说真的很危险。
我的问题很简单,您如何安全地操作实体?
您是仅将实体用于保存、删除、更新和获取持久存储,还是在实体中编写函数并将其用作真实对象?
例如,我有一张包含许多叠加层的地图,每个叠加层都有玩家。 我创建了四个对象:MyAppPlayer:Models,Player:Entity,MyAppOverlay:Models,Overlay:Entity。 MyAppPlayer 加载和存储实体,这是一个好习惯吗? 如果没有,你怎么办?
【问题讨论】:
【参考方案1】:Core Data 是一个对象图,而不是数据库。
您应该将 Core Data 简单地视为对象持久性的支柱。持久存储包含数据,您的自定义类包含功能。
是的,请向您的类文件添加自定义功能。这就是他们来这里的目的。
但是,请确保您了解这些概念。您不会“删除上下文”。它只是一个方便的“便签本”,用于您的数据操作。您将上下文传递给您的控制器,以便他们可以访问和操作数据。
在您的情况下,无需区分“模型”和“实体”。实体确实是模型的一部分(在我们的 NSManagedObjectModel 中定义)。这很简单:创建依赖自定义实体作为数据源的地图叠加层。
【讨论】:
好吧,但是如果我想在没有持久存储的情况下临时操作一个对象,尤其是不在持久存储中修改它,我必须创建另一个上下文并在不再需要它时将其删除。 .. 这不是我的问题的答案,但我关闭了,因为我重新打开了 Sqlite 解决方案,我不再需要这个问题了【参考方案2】:将实体视为表,将属性视为列。关系(一对多、多对多等)也非常相似,因为 CoreData 只是使用 SQLite 作为它的持久存储。实体可以有多个属性和关系。如果您熟悉 SQL,那么这一切都应该是有意义的。您可以打开 SQLite 存储文件并查看 CoreData 如何组织事物以消除任何混乱。
【讨论】:
以上是关于核心数据:对象操作(良好实践)的主要内容,如果未能解决你的问题,请参考以下文章
全面解读 NoSQL 数据库 Redis 的核心技术与应用实践