【问题标题】:How does Core Data fit into MVC model objects?Core Data 如何适应 MVC 模型对象?
【发布时间】:2013-06-22 08:16:01
【问题描述】:

这更多是一个理论问题,但是 Core Data 对象应该/应该如何适应应用程序的“模型”?在最简单的层面上,“模型”可以直接是核心数据对象,但它们本身只是没有任何“可观察”功能的数据容器。可能有一个单独的模型类来封装核心数据对象,这似乎是一个更好的解决方案,但我不确定引用应该是强引用还是弱引用。

此外,模型是否应该关注和/或处理自己的持久性?

【问题讨论】:

  • “核心数据”不是 MVC 设计模式的一部分。听起来你想在面向对象的代码中硬塞一些全局状态。
  • 怎么不是?就其本身而言,我想您可以将 Core Data 视为持久性机制,但它的托管对象本质上是应用程序的状态。可能我没明白你的意思……
  • @tereško 我认为他在谈论域对象,它们确实在模型中,在 DAO 和服务之间。

标签: design-patterns model-view-controller core-data


【解决方案1】:

在 Apple 使用 MVC 习语的上下文中,核心数据本身绝对有资格用于整个数据层。

托管对象子类可以包含很多功能——您称之为模型“逻辑”。这是一种非常常见的设计模式。例如,如果您的数据模型使用美元值描述交易数据,您可以使用获取请求模板来提供这些值的总和。您可以通过使用提供计算/格式化等数据的自定义方法扩展托管对象来做更复杂的事情。

然后,在您的控制器中,您可以读取和更改数据,从 UI 获取输入并更新数据的显示。你的控制器不应该做更多的事情。

当然,在极其复杂的应用程序逻辑的情况下,您始终可以创建像DerivativesTradingProfitabilityEngine 这样的单例,它可以处理来自 Core Data 的数据并将其提供给 UI 控制器。如果您需要在后台线程中进行大量繁重的工作,这可能是合适的。

然而,在大多数情况下,标准的 Core Data 设置就足够了。

【讨论】:

  • 如何使用自定义方法扩展托管对象?如果将方法添加到生成的类中,在添加新字段后下次重新生成时它们不会丢失吗?
  • 有效点。我通常使用单独文件中定义的类别来执行此操作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-14
  • 2011-07-22
  • 1970-01-01
  • 1970-01-01
  • 2021-03-25
  • 1970-01-01
相关资源
最近更新 更多