基于Cocoa文档的应用程序中的MVC

基于Cocoa文档的应用程序中的MVC,cocoa,core-data,document,cocoa-design-patterns,nswindowcontroller,Cocoa,Core Data,Document,Cocoa Design Patterns,Nswindowcontroller,目前,我正在对我的应用程序进行重构和重组。我已经意识到模型和视图以及它们的控制器之间的一些分离已经减少,我希望做一些清理 我的应用程序中使用了几个关键类:NSPersistentDocument、NSWindowController和一个模型类 NSPersistentDocument类充当“模型控制器”;它拥有模型类的一个实例,并管理与模型的所有交互 NSWindowController类充当“视图控制器”;它拥有主窗口,并管理主窗口中视图的交互。此类也是定义窗口的nib文件的文件所有者 我在

目前,我正在对我的应用程序进行重构和重组。我已经意识到模型和视图以及它们的控制器之间的一些分离已经减少,我希望做一些清理

我的应用程序中使用了几个关键类:NSPersistentDocument、NSWindowController和一个模型类

NSPersistentDocument类充当“模型控制器”;它拥有模型类的一个实例,并管理与模型的所有交互

NSWindowController类充当“视图控制器”;它拥有主窗口,并管理主窗口中视图的交互。此类也是定义窗口的nib文件的文件所有者

我在这里看到的问题是,我没有一个真正的“控制器”。我当前的设计强制模型控制器和视图控制器相互了解。两者之间没有冥想对象,因此,我的模型和视图没有明确分开,这使得支持多个视图或模型成为一个问题

我想将功能从我现有的两个控制器转移到一个新的“控制器”类中,该类将充当模型控制器和视图控制器之间的控制器。最后,这仍然只是MVC设计模式,只是多一点结构

然而,我很难弄清楚这将如何适应Cocoa基于文档的应用程序架构

我最大的问题是在哪里以及如何创建这个新的控制器对象? 这与Cocoa的架构有什么关系? 我是否在反对Cocoa的架构,有没有更好的方法


谢谢。

听起来你需要拿一份,回答这些问题,然后再回答一些


第2章讨论使用ArrayController作为模型控制器(而不是您正在使用的持久文档模型控制器)的MVC模式。

拥有“模型控制器”和“视图控制器”的良好本能。对于M和V通常是如何结合在一起的,这是一个非常好的心理分类法。但是,正如您所注意到的,您仍然可以在MVC中使用纯“C”将整个操作联系在一起

如果您谈论的是一个控制器,那么对于应用程序: 可以将(big-C)控制器看作是从应用程序的main()函数中衍生出来的东西——在旧的Cocoa教程中,这个对象通常被称为AppController。它可能是UIApple的委托,或者不是,但如果不是,您应该考虑在项目中的应用程序委托的<代码> AptudioDimeFixSimult:方法中创建这样的主控制器。然后,AppController可以设置(和拥有)模型对象,并设置(和拥有)根视图控制器,用户界面从根视图控制器中弹出

如果您谈论的是有多个实例的中介组件,文档体系结构中的每个模型/视图“对”对应一个实例,那么也可以这样做
DocumentController
是您想要的名称,尽管Cocoa已经有了其中一个名称,可能反映了您需要的功能类型,也可能没有。“DocumentManager”是另一个候选名称