2011-09-11 39 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