2011-09-11 38 views
3

我正在学习可可。我正在经历3个关键类,它们构成了Cocoa中文档体系结构的基础。谁是Cocoa MVC文档体系结构中的控制器?

  • NSDocument
  • NSWindowController或它的子类
  • NSDocumentController

我想NSWindowController必须控制器 MVC中的条款和NSDocument模式。我们在界面生成器中创建的任何视图基本上都是视图。如果它是正确的,那么NSWindowController或其子类应该得到NSDocument的实例,并且它应该处理所有的保存,加载和更新任务。但是阅读文档和书籍,似乎NSDocument本身可以处理这些任务。看起来模特正在做控制器工作的一部分,我发现很难消化。我错过了什么?请你澄清概念模型?

+0

控制器要求模型做这些事情,模型不管它喜欢什么。 – BoltClock

回答

4

NSDocument很难被视为模型对象。它是一个模型控制器,它拥有数据模型。此外,它拥有窗口控制器,模型对象不应该这样做。 模型控制器不应与拥有该视图的视图控制器混淆。 所以,我会说NSDocument不能完全匹配模式 - 视图 - 控制器模式的任何元素。

+0

是的,也许最好把'NSDocument'当作模型控制器。我并不确定它是严格的模型。 – 2011-09-11 11:28:58

+0

我现在明白了。我认为'NSDocument'是一个模型对象(在我的防守中,它的名字**听起来像一个模型),我犯了一个错误。正如你所说,它确实是一个**模型控制器。 – Hemant

1

这三个类都是控制器。就像你有不同种类的视图和不同种类的模型对象一样,所以你也有不同种类的控制器。 MVC的一大特色就是它提高了可重用性,特别是在视图和模型类中。然后,控制器的一大责任是专门化或适应这些可重用类以满足应用程序的特定需求。虽然控制器通常在模型和视图之间进行解释,但我认为假设每个控制器交互必须涉及模型和视图,或者每个控制器甚至直接处理模型和视图都是错误的。

+0

Caleb,(为了理解你的意思)你能给出一个不在View对象和Model对象之间调解的Controller的例子。 –

+0

@BobUeland'UINavigationController'是视图控制器的一个例子,根本不与模型交谈。我写这个答案已经差不多4年了,但我想我是在说'NSDocument'是一种控制器,即使它不直接处理视图。从这个意义上讲,'NSDocument'是另一个例子,因为它处理模型对象而不是视图。 – Caleb