【问题标题】:Best practice for core data function核心数据功能的最佳实践
【发布时间】:2012-01-15 19:03:06
【问题描述】:

当您有多个执行相似核心数据调用的视图控制器时,在使用核心数据的 iPhone 应用程序中使用的最佳设计是什么?

目前我有一个应用程序,它有几个视图控制器,它们都执行类似的功能,比如向实体添加对象、删除实体等。我认为有几种方法可以处理这个问题:

  1. 每个视图控制器都有自己的 addItem:blah 类。缺点是这会导致类之间出现一些复制粘贴

  2. 创建一个具有核心数据方法的超类,并从该类继承。必要时覆盖

  3. 创建一个类别,以便视图控制器的所有实例都具有这些方法,而无需子类化

  4. 创建一个可以调用的数据管理器单例。拥有它可能很有用,因此我可以在每个视图控制器之外对请求进行排队并进行数据管理。缺点是这感觉一般来说是个坏主意

【问题讨论】:

  • 为什么 4. 感觉是个坏主意?

标签: ios iphone core-data


【解决方案1】:

CoreData 和 ViewController 不需要相互了解。

UIViewControllers 不是 MVC 世界中的传统控制器。它们与视图更紧密地结合在一起——我更喜欢在创建它们时考虑到这一点,(大多数 Apple 示例代码都有很多 ModelController 代码——可能是为了示例的简单性)。

我喜欢创建 ModelController 并让我的 ViewController 管理我的 View,我给我的 ViewController 一个我的 ModelController 的实例。

我的 ModelController 将管理我的模型、加载、编辑、删除等...我仍然将我的模型类公开给我的 ViewController,但视图永远不会离开 ViewController。你永远不会在 ModelController 中看到视图。

这样做的好处是,如果您稍后创建 iPad 应用程序 - 您的模型及其行为方式完全独立于您的 ViewControllers,因此当您为 iPad 应用程序创建一些新的 UIViewControllers 时 - 您可以插入您的 ModelControllers。

您的 ModelController 可能有一个包含重复 CRUD 方法的父类。

或者……

名为 MagicalRecord https://github.com/magicalpanda/MagicalRecord 的库将 Active Record 模式添加到 NSManagedObjects。

【讨论】:

    猜你喜欢
    • 2014-04-11
    • 2011-11-30
    • 1970-01-01
    • 1970-01-01
    • 2011-03-22
    • 1970-01-01
    • 1970-01-01
    • 2017-03-05
    • 1970-01-01
    相关资源
    最近更新 更多