3

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

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

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

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

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

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

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

我最大的问题是在哪里以及如何创建这个新的控制器对象?这如何适应 Cocoa 的架构?我是否在与 Cocoa 的架构作斗争,有没有更好的方法来做到这一点?

谢谢。

4

2 回答 2

1

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

如果你在谈论一个控制器,对于应用程序:将(big-C)控制器想象成从你的应用程序的 main() 函数中衍生出来的东西——在较早的 Cocoa 教程中,这个对象通常称为 AppController。它可能是 UIApplication 的委托,也可能不是,但如果不是,您应该考虑applicationDidFinishLaunching:在项目中的应用委托的方法中创建这样的主控制器。然后,该 AppController 可以设置(并拥有)模型对象并设置(并拥有)您的 UI 的根视图控制器。

如果您正在谈论一些有多个实例的中介组件,一个文档架构中的每个模型/视图“对”,那么也只需制作类似的东西。DocumentController是您想要的那种名称,尽管 Cocoa 已经有一个可能反映或可能不反映您需要的功能类型的名称。“DocumentManager”是另一个候选名称。

于 2010-02-24T06:20:12.427 回答
0

听起来你需要拿起一份Cocoa Design Patterns,回答这些问题,然后回答一些问题。

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

于 2010-02-16T21:32:24.557 回答