核心数据道模式

Posted

技术标签:

【中文标题】核心数据道模式【英文标题】:Core data dao pattern 【发布时间】:2013-02-03 22:24:20 【问题描述】:

我开始为 ios 开发,现在我正在研究核心数据。 有一件事我不清楚,当我研究很多人在控制器上管理核心数据实体时。 对我来说,这不是 MVC,因为核心数据来自模型层。

所以我认为使用 DAO 模式实现核心数据会很好,但在我想知道是否有任何核心数据模式或者是否有一些使用核心数据实现 DAO 的缺点之前?

【问题讨论】:

关于控制器与模型交互的 MVC 不是什么?什么是 DAO?它与您的问题有什么关系? 在 MVC 中,我认为控制器应该尽可能薄,在控制器上使用核心数据对我来说没有多大意义,就像在数据库上查询,但使用包装器。 我不确定我是否理解。你是说在 Core Data 上运行 fetch 请求的控制器是错误的吗? 例如,如果您使用 fetch 请求进行查询、谓词、排序和处理控制器上的错误,我们正在创建需要复制和粘贴以重用它的长而复杂的方法. @PeterHosey DAO 模式还可以定义特定领域的方法——即与被管理实体相关的方法。例如:listCustomersByFirstName:(NSString*)name 【参考方案1】:

避免在控制器中实现数据查找方法确实是正确的。这种方式遵循了 MVC 设计模式的理念:控制器应该只是调用高级“粘合”代码,因此充当描述视图如何与模型交互的文档。

关于持久对象,有两种主要方法:

使用 ActiveRecord 模式 使用数据访问对象模式。

数据访问对象 (DAO) 是专用于将模型/域对象持久化到数据源的接口。

ActiveRecord 模式将持久化方法放在模型对象本身上,而 DAO 定义了一个离散接口。 DAO 模式的优点是:

很容易定义另一种持久性风格,例如从数据库迁移到云,而无需更改接口并因此影响其他类。

持久性关注点被模块化,远离主要的模型对象关注点。

ActiveRecord 模式的优点是简单。

CoreData 的 ActiveRecord

目前,ActiveRecord 模式似乎在 Objective-C 开发人员中更受欢迎。以下项目为 CoreData 提供 ActiveRecord:https://github.com/magicalpanda/MagicalRecord

CoreData 的 DAO

我不熟悉为 CoreData 提供 DAO 模式的广泛使用的库。然而,它可以很容易地在没有库的帮助下应用:

为特定实体定义所有数据方法 - 协议上的 findByName、保存、删除等。 通过调用适当的 CoreData 方法来实现协议。

注意:example project for the Typhoon framework 很快将包含一些将 DAO 模式与 CoreData 一起应用的示例。

【讨论】:

【参考方案2】:

你正在寻找类似Core Date Persistence Framework的东西

这个框架允许你这样做:

DAOFactory *factory = [DAOFactory factory];
DAO *dao = [factory createRuntimeDAO:@"EntityName"];
NSArray *items = [dao findAll];

还有很多更有趣的事情。

【讨论】:

以上是关于核心数据道模式的主要内容,如果未能解决你的问题,请参考以下文章

设计模式总结:概念原则23种模式分析

如何通俗理解设计模式及其思想

读C#代码整洁之道笔记03_切面关注点异常处理和线程与并发

核心数据数据访问模式?

核心数据编码模式

在位置后台模式下从核心数据访问数据