AppDelegate 文件在哪里适合 MVC?

Posted

技术标签:

【中文标题】AppDelegate 文件在哪里适合 MVC?【英文标题】:Where does the AppDelegate file fit into MVC? 【发布时间】:2011-12-21 09:06:20 【问题描述】:

我正在学习 iPhone/iPad 编程。我相信我理解 MVC 的概念;我遇到的困难是理解普通 iPhone/iPad 应用程序中的某些文件如何适合 MVC。

当您使用“基于视图的应用程序”模板创建新应用程序时,会创建 AppDelegate.m 和 AppDelegate.h 文件。

那是模型、视图还是控制器文件?我猜实际上这些都不是。我希望我能看到一个图表或流程图,显示应用程序中的每个文件属于什么类别。

【问题讨论】:

【参考方案1】:

并非每个文件都适合特定类别,但是,我不得不说,在这种情况下,AppDelegate 是一个控制器,它既不直观地呈现数据(视图),也不代表实际数据(模型)但它确实确定了在应用程序启动时显示哪些视图控制器等并管理其他视图(状态栏等)。

我不会太担心尝试将每个文件分类到 MVC 中,如果有的话,有些可能并不完全适合。

【讨论】:

【参考方案2】:

应用程序委托是一个控制器对象。默认情况下,它是 ios 应用程序中主窗口(即视图)的所有者和控制器。应用程序委托从代表或建模应用程序本身的对象(UIApplication 的实例)接收消息。它在应用程序对象(应用程序和系统之间的接触点)和应用程序的显示之间进行中介。

【讨论】:

【参考方案3】:

我将 AppDelegate 视为控制器,因为这种代码

- (BOOL)application:(UIApplication *)application 
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

// Override point for customization after application launch.

self.window.rootViewController = self.viewController;
[self.window makeKeyAndVisible];
[application setStatusBarHidden:YES withAnimation:NO];
return YES;

AppDelegate 是一个在模型和视图之间建立链接的地方。 在 AppDelegate 中放置特定于您的应用程序的代码。 View 和 Model 应该能够存在于其他应用程序中(如 UIView 类),因为它们不是特定于应用程序的。 这在 Mac 桌面应用程序中更为明显,在该 Delegate 中还有更多工作要做。

【讨论】:

【参考方案4】:

这是一个老问题,但我今天问了自己同样的问题。我认为 AppDelegate 类不能仅归类为 Controller。它控制 Window 并建立它的根控制器,因此它可以归类为 View Controller(注意:UIWindow 继承自 UIView)。但它也执行更多与模型相关的任务,例如应用程序终止时的数据持久性。所以它可以被认为是一个模型控制器或者也参与了数据访问层。

它还负责处理 URL 打开。这可能会导致视图更改,但也肯定需要与模型相关的任务,例如解析、持久化、更新、身份验证等。如果视图/模型通过 KVO 绑定,则简单地更新模型可能会导致所需的视图更新。我觉得这将是一个更好的设置。此外,默认情况下,所有 Core Data 堆栈都添加到 AppDelegate 中这一事实使其不再仅仅与 View 相关。

它认为它负责处理应用程序的任何事情这一事实导致它具有多种用途。也许这就是为什么开发人员最终将任何东西都扔在这里的原因。它在根控制器、应用服务层和应用模型管理器的意义上都是应用程序的管理器。

由于 AppDelegate 是应用程序的入口点(对开发人员而言),因此从应用程序的角度来讨论它是有意义的。应用程序正在终止,应用程序正在进入后台等。我们将应用程序作为 Model 实体进行讨论。

【讨论】:

您可以根据需要在视图控制器中进行数据持久化,但这并不意味着您应该这样做。在我看来,你应该将你征募的所有任务委托给真实的模型对象。

以上是关于AppDelegate 文件在哪里适合 MVC?的主要内容,如果未能解决你的问题,请参考以下文章

在哪里存储持久容器(或任何全局对象)? AppDelegate 还是场景委托?

如何在 mvc c# 中转换 base64 字符串格式的 cloudinary 文件

Xcode 生成的 AppDelegate 和 ViewController 文件的用途是啥?

MVC中的css3pie,pie.htc文件放在哪里?

iPhone 查找 AppDelegate

VS 2019 中 IIS Express 调试器的 .Net Core MVC appsettings.json 文件在哪里