根据Cocoa 核心能力的模型-视图-控制器
模型-视图-控制器 (MVC) 设计模式为应用程序中的对象分配三个角色之一:模型、视图或控制器。该模式不仅定义了对象在应用程序中扮演的角色,还定义了对象相互通信的方式。这三种类型的对象中的每一种都通过抽象边界与其他类型的对象分开,并通过这些边界与其他类型的对象进行通信。应用程序中某种 MVC 类型的对象的集合有时被称为一个层——例如,模型层。
MVC 是 Cocoa 应用程序良好设计的核心。采用这种模式的好处很多。这些应用程序中的许多对象往往更易于重用,并且它们的接口往往被更好地定义。具有 MVC 设计的应用程序也比其他应用程序更容易扩展。此外,许多 Cocoa 技术和架构基于 MVC,并要求您的自定义对象扮演 MVC 角色之一。
模型对象
模型对象封装特定于应用程序的数据,并定义操作和处理该数据的逻辑和计算。例如,模型对象可能代表游戏中的角色或通讯录中的联系人。模型对象可以与其他模型对象具有一对一和一对多的关系,因此有时应用程序的模型层实际上是一个或多个对象图。在数据加载到应用程序后,作为应用程序持久状态一部分的大部分数据(无论该持久状态存储在文件还是数据库中)都应该驻留在模型对象中。因为模型对象代表与特定问题域相关的知识和专业知识,所以它们可以在类似的问题域中重用。理想情况下,
通信:视图层中创建或修改数据的用户操作通过控制器对象进行通信,并导致模型对象的创建或更新。当模型对象发生变化时(例如,通过网络连接接收到新数据),它会通知控制器对象,控制器对象会更新相应的视图对象。
查看对象
视图对象是应用程序中用户可以看到的对象。视图对象知道如何绘制自己并且可以响应用户操作。视图对象的一个主要目的是显示来自应用程序模型对象的数据并允许编辑该数据。尽管如此,视图对象通常与 MVC 应用程序中的模型对象分离。
因为您通常重用和重新配置它们,所以视图对象提供了应用程序之间的一致性。UIKit 和 AppKit 框架都提供了视图类的集合,而 Interface Builder 在其库中提供了数十个视图对象。
通信:视图对象通过应用程序的控制器对象了解模型数据的变化,并通过控制器对象将用户发起的更改(例如,在文本字段中输入的文本)传达给应用程序的模型对象。
控制器对象
控制器对象充当一个或多个应用程序的视图对象和一个或多个其模型对象之间的中介。因此,控制器对象是一个管道,视图对象通过它了解模型对象的变化,反之亦然。控制器对象还可以为应用程序执行设置和协调任务,并管理其他对象的生命周期。
通信:控制器对象解释用户在视图对象中所做的操作,并将新的或更改的数据传达给模型层。当模型对象发生变化时,控制器对象会将新的模型数据传递给视图对象,以便它们可以显示它。