PersistentModel
为 iOS 和 OS X 便于持久化模型的创建。
This repository is being created now. The full description and how it works guide will be added in the next days also with code comments.
PersistentModel 同样使用了与 CoreData 一样的 上下文 和 持久化存储 概念,并结合 NSCoding
协议来编码和解码模型对象。
通过代码编写您的类,并添加编码协议,您将拥有一个完整的持久对象管理。它快速、简单且在不需要在所有对象集合中创建复杂查询时非常有用。
此外,PersistentModel 支持通过 KVC 多键访问,这意味着您可以定义额外的键来访问和检索属性。这对于从来自外部服务器的字典中设置值非常有用。
概述###
非关系型模型
PersistentModel 被设计为非关系型模型。这意味着您的模型对象之间没有任何关系(通过指针)。相反,我们使用了一个标识符系统:每个模型对象都有一个唯一的 键,而对象之间的关系则是通过存储该 键 来实现的。
Relational Model Non-Relational Model
Object A Object B Object A Object B
-------- -------- -------- --------
int field int anotherField int key int key
B objB int field int anotherfield
int keyB
那么在这种情况下,我们如何获得关系型对象呢?我们需要使用我们所说的 ObjectContext。ObjectContext 是模型对象保留和保持活跃的地方,并负责通过实现如 -objectForKey: 等方法提供对象并通过调用它们来提供对象。
描述
PersistentModel 可以分为三个部分:
-
基对象:您的持久化对象的超类。处理与上下文的关系,并支持通过 KVC 方式访问多个键。
-
对象上下文:实时实例的操纵和管理。负责与持久化存储交互并保存和加载实例到持久化中。
-
持久化存储:负责序列化和反序列化对象上下文及其所包含的所有模型对象。
基对象
由于我们正在实现一个非关系型模型,因此一个 BaseObject 或模型对象包含一个标识符或 键。该键用字符串表示,并且必须是唯一的,否则您无法将具有相同键的另一个对象注册到保留其他对象的上下文中。
此外,模型对象还持有已注册上下文的弱引用。这对于通过使用自包含上下文检索那些对象来遍历关系非常有用。
要创建自己的模型,您的模型类必须是BaseObject
的子类,并且需要重写+ (NSSet*)keysForPersistentValues方法,返回一个包含所有持久属性和关系键名的集合。只有在这个方法中列出属性才会被存储到持久化中。在序列化操作期间,将通过KeyValueCoding(KVC)访问这些属性。
序列化是通过NSCoding协议完成的,这意味着您也可以对实现该协议的任何自定义对象进行序列化。
对象上下文
待办事项
持久存储
待办事项
使用示例
许多不同的情况都可以用PersistentModel
来解决。以下是其中几个示例,我们可以欣赏到使用该框架(或模式)提供的简单解决方案。
与外部服务器进行JSON通信
待办事项
正确使用ObjectContext
待办事项
存储库依赖
- FMDB (SQLite管理): https://github.com/ccgus/fmdb
许可
版权所有 (c) 2013 Joan Martin, [email protected].
以下是对本软件及相关文档文件(“软件”)的副本的任何人,免费获得在此软件和关联的文档文件的副本上(“软件”),在不限于使用、复制、修改、合并、发布、分发、再许可和/or 销售软件的副本的权利,并允许向用户提供软件的人员按照以下条件如此操作
上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。
软件按“原样”提供,不提供任何形式的保证,明示或暗示,包括但不限于适销性、针对特定目的的适用性和非侵权保证。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任负责,无论是根据合同、侵权或其他方式引起的,无论是源于、因之或与此软件或软件的使用或其他交易有关。