对于多个视图和控制器,MVC类组织是什么样的?

时间:2010-04-21 22:46:52

标签: cocoa model-view-controller organization

MVC本身的想法对我来说似乎很清楚,但我无法理解这个概念如何“扩展”到多个视图和控制器。

似乎Cocoa将控制器的方法作为模型和视图之间的“交换机”。如果有多个视图,应用程序将如何组织和运行?如果存在与每个视图相关联的控制器,主应用程序是否必须跟踪它产生的所有控制器,或者每个控制器将具有它实例化的“嵌套”控制器,例如,一个应用程序会创建一个窗口,窗口会创建一个工具栏等吗?

如果整个应用程序需要使用相同的模型,或者您将模型分解为较小的模型,该怎么办?

看起来我真正想问的是如何在保留模块化MVC结构的同时将多窗口/视图应用程序拆分为其逻辑块。我试图查看WordPress iPhone应用程序和Adium中的代码,但两者似乎都有一个相对较大的代码库,我迷失了。

1 个答案:

答案 0 :(得分:2)

通常,控制器是分层实现的。例如,在标准的Cocoa Document体系结构中,您有一个NSDocumentController来管理NSDocument的多个实例。 NSDocument的每个实例都管理NSWindowController的一个或多个实例,NSWindowController的每个实例都可以管理NSViewController的一个或多个实例。

当您向下移动层次结构时,控制器的职责变得更加具体和细化。在访问模型方面,Cocoa有几种模式,例如委托和数据源模式,您可以使用它们来绘制视图,而视图不需要知道模型本身的任何信息。

通常,应用程序只有一个统一的模型,除非有不同的模型是有意义的(例如,如果您需要您的应用程序来编辑不同类型的文档)。