【问题标题】:Why does Apple say iPhone apps use MVC?为什么 Apple 说 iPhone 应用程序使用 MVC?
【发布时间】:2019-04-16 08:43:07
【问题描述】:

Apple 将 iPhone 应用程序使用的架构模式描述为 MVC。然而,几乎没有现代应用程序使用 MVC(如 Trygve Reenskaug 所述)。包括 iPhone OS 在内的现代操作系统固有地处理控制器职责。被错误地和通常称为 MVC 的东西实际上是 MVP。

为什么 Apple 说 MVC 而不是 MVP?

【问题讨论】:

  • stackoverflow 是使用 MVC 构建的
  • “几乎没有现代应用程序使用 MVC”。这有来源吗?我想了解更多。

标签: iphone cocoa-touch design-patterns


【解决方案1】:

这当然是一个很好的问题 - 我不确定我是否知道答案。我认为 Apple 几乎普遍使用术语 MVC,因为 Cocoa/AppKit 中的许多视图使用数据绑定直接从模型中提取数据,这与 MVP 模式相违背。在下图中(来自This article),MVP 模型显示了通过演示器移动的所有数据 - 而对于构建良好的 Cocoa 应用程序来说通常不是这种情况。

在大多数 Cocoa 应用程序中,数据绑定和键值观察用于将视图和模型绑定在一起,而不需要控制器的交互来更新它们。此外,在 Cocoa 应用程序中有一个主控制器,它决定何时何地加载视图。借用 glenn_block 对this question 的回复:

在 MVC 中,Controller 是 负责确定哪个View 响应任何操作而显示 包括应用程序加载时。 这与 MVP 不同,其中的操作 通过视图路由到 演示者。


(来源:vuscode.com

希望对您有所帮助!这可能是苹果的一个完全随机的决定——但我认为他们的选择是合理的。

【讨论】:

  • 在 cocoa 模型和视图不直接作为 mvc 交互。它实际上是被动视图变体的 MVP。
  • 在您的 MVP 图中,视图和演示者之间的圆圈是什么意思? (红色箭头指向绿色圆圈)
  • 图表的链接已损坏。此外,其中的圆圈可能表示 View 公开的公共接口(Presenter 用于请求 View 的数据和/或更新 View,如 here 所示)。
【解决方案2】:

在大多数 Cocoa 应用程序中,数据绑定和键值观察用于将视图和模型绑定在一起,而不需要控制器的交互来更新它们。 块引用

我不同意。

根据斯坦福 CS193P(iOS7 编程)课程教授 Paul Hegarty 的说法,Cocoa 中的模型与视图对话。我看过所有的课程(2011、2012、2013,它们都在 iTunesU 上免费提供),每次他都重复这个。在 2013 年秋季课程中,他举例说明了您可能希望在 iPhone 中显示的歌曲列表(您的模型)(作为视图):视图要求控制器显示一堆歌曲,这是控制器与模型对话,获取一些歌曲,并将它们推送到视图。该视图将仅显示歌曲。视图从不保存模型数据。

他说KVO(key value observing)是Model和Controller之间通信的一种模式。 没有绑定。

我认为“Apple MVC”==“Microsoft MVP”。

“Microsoft MVC”仅适用于 Web,称为“ASP.NET MVC 4”。 在 web 中,Controller 是“用户输入入口点”,而在桌面/触摸中则是 View

【讨论】:

    【解决方案3】:

    截至目前,在进入 Apple 的 Model-View-Controller 网页时,您会看到一条提示“Retired Document: This document may not represent the best practice for current development”。

    我相信这表明 Apple 承认 MVC 不再是“对 Cocoa 应用程序的良好设计至关重要”的最合适的架构。因此,为了回答您的问题,截至 2019 年,Apple 不再说 iPhone 应用程序应该使用 MVC。

    您可以在这里查看:https://developer.apple.com/library/archive/documentation/General/Conceptual/DevPedia-CocoaCore/MVC.html

    【讨论】:

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