2010-04-21 19 views
2

MVC本身的想法對我來說似乎很清楚,但我很難理解這個概念如何「擴大」到多個視圖和控制器。對於多個視圖和控制器,MVC類組織的外觀如何?

Cocoa似乎將控制器的方法作爲模型和視圖之間的「交換機」。如果有多個視圖,應用程序將如何組織和運行?如果有一個控制器與每個視圖相關聯,主應用程序是否必須跟蹤其產生的所有控制器,或者每個控制器將具有實例化的「嵌套」控制器,例如,一個應用程序會創建一個窗口,該窗口會創建一個工具欄等?

如果整個應用程序需要使用相同的模型,或者將模型分解爲較小的模型會怎樣?

看來我真正問的是如何將多窗口/視圖應用程序拆分爲其邏輯塊,同時保留模塊化的MVC結構。我試圖從WordPress iPhone應用程序以及Adium中查看代碼,但都似乎有一個相對較大的代碼庫,我迷路了。

回答

2

通常控制器是分層實現的。例如,在標準Cocoa Document架構中,您有一個NSDocumentController,它管理NSDocument的多個實例。 NSDocument的每個實例管理NSWindowController的一個或多個實例,並且NSWindowController的每個實例可以管理NSViewController的一個或多個實例。

隨着您向下移動層次結構,控制器變得更加具體和細緻。在訪問模型方面,Cocoa提供了幾種模式,例如委託和數據源模式,您可以使用這些模式允許視圖繪製而不需要了解模型本身的任何內容。

一般來說,應用程序應該有一個統一的模型,除非它有不同的模型(例如,如果你需要你的應用程序來編輯不同類型的文檔)是有意義的。

+0

在野外有沒有很好的例子呢?我慢慢習慣了Adium,但我對CoreData和其他'數據導向'應用程序更感興趣。 – dmkc 2010-04-22 00:45:52

+1

Apple's Sketch示例代碼是「標準」參考應用程序:http://developer.apple.com/mac/library/samplecode/Sketch-112/ – 2010-04-22 01:14:37

+0

完美!謝謝! – dmkc 2010-04-22 01:38:23

相關問題