代码之家  ›  专栏  ›  技术社区  ›  CJ.

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

  •  3
  • CJ.  · 技术社区  · 15 年前

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

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

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

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

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

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

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

    我面临的最大问题是,这个新的控制器对象将在哪里以及如何创建? 这和可可的建筑有什么关系? 我是在反对可可的建筑吗?还有更好的方法吗?

    谢谢。

    2 回复  |  直到 15 年前
        1
  •  1
  •   Ben Zotto sberry    15 年前

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

    如果你说的是一个控制器,对于应用程序: 把(big-c)控制器看作是从应用程序的main()函数中发展出来的东西——在旧的cocoa教程中,这个对象通常称为app controller。它可能是uiapplication的委托,或者不是,但是如果不是,您应该考虑在 applicationDidFinishLaunching: 项目中应用程序委托的方法。然后,该AppController可以设置(和拥有)模型对象,并设置(和拥有)根视图控制器,从中可以生成UI。

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

        2
  •  0
  •   pokstad    15 年前

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

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