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

问题描述 投票:4回答:3

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

Apple为什么说MVC而不是MVP?

iphone cocoa-touch design-patterns
3个回答
18
投票

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

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

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

alt text (来源:vuscode.com

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


8
投票

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

我不同意。

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

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

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

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


0
投票

截至目前,在进入Apple的模型 - 视图 - 控制器网页时,您将收到一条提示,指出“退休文档:此文档可能不代表当前开发的最佳实践”。

我相信这表明Apple承认MVC不再是最适合“Cocoa应用程序良好设计的核心”的架构。所以为了回答你的问题,截至2019年,Apple不再说iPhone应用程序应该使用MVC。

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

© www.soinside.com 2019 - 2024. All rights reserved.