Apple为什么说iPhone应用程序使用MVC?

时间:2009-06-27 18:50:43

标签: iphone cocoa-touch design-patterns

Apple将iPhone应用程序使用的架构模式描述为MVC。但是,几乎没有现代应用程序使用MVC(如Trygve Reenskaug所述)。现代操作系统,包括iPhone OS,本身就可以处理控制器的责任。什么是错误的,通常被称为MVC实际上是MVP。

Apple为什么说MVC而不是MVP?

3 个答案:

答案 0 :(得分:18)

这当然是一个很好的问题 - 而且我不确定我知道答案。我认为Apple几乎普遍使用术语MVC,因为Cocoa / AppKit中的许多视图使用数据绑定直接从模型中绘制数据,这打破了MVP模式。在下图(来自This article)中,MVP模型显示了通过演示者移动的所有数据 - 对于精心构建的Cocoa应用程序而言通常情况并非如此。

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

  

在MVC中,Controller是   负责确定哪个View   显示以响应任何操作   包括应用程序加载时。   这与行动中的MVP不同   途径通过视图到   主持人。

alt text
(来源:vuscode.com

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

答案 1 :(得分:8)

  

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

我不同意。

根据CS193P(iOS7编程)课程的斯坦福大学教授Paul Hegarty的说法,Cocoa中的模型永远与View对话。我已经观看了所有课程(2011年,2012年,2013年,它们都可以在iTunesU上免费获得),每次重复此课程。在2013年秋季课程中,他举了一个你可能想要在iPhone中显示的歌曲列表(你的模型)的例子(视图):视图要求控制器显示一堆歌曲,这是它的责任。控制器与模型交谈,拍摄一些歌曲,然后将它们推向视图。视图仅显示歌曲。视图从不保存模型数据。

他说KVO(键值观察)是模型和控制器之间通信的模式。 没有约束力。

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

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

答案 2 :(得分:0)

到目前为止,进入Apple的Model-View-Controller网页后,系统会提示您“已淘汰的文档:该文档可能不代表当前开发的最佳做法”。

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

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