剛剛開始學習Objective-C和可可在BNR的幫助下可可編程Mac OS X(第4版),我正在研究一個基於文檔的應用程序。我已經通過在文檔架構蘋果的開發者文檔閱讀,並且選擇了繼承NSWindowController
和我NSDocument
子類中重寫makeWindowControllers
。我有這樣幾個原因:從視圖邏輯Cocoa MVC:「模型控制器」和「視圖控制器」之間的交互
- 到單獨的模型邏輯(在
NSDocument
子類)(在NSWindowController
子類)。 - 定製的我的文檔窗口(蘋果開發者文檔中說,這樣做沒有不必要的副作用的正確方法是繼承
NSWindowController
和覆蓋windowTitleForDocumentDisplayName:
- 蘋果的文檔似乎強烈建議繼承
NSWindowController
爲所有,但最簡單的標題應用程序,而我絕對不是「簡單」
所以,我NSDocument
子類是模控制器,我NSWindowController
子類是視圖控制器。此外,我明白應用程序的大部分「工作」都是在控制器對象中完成的,因爲視圖和模型應該儘可能不受應用程序和可重用的影響。現在我的問題是:這兩種類型的控制器如何相互作用來實現這個「工作」?
例如,假設我正在寫一個電子表格應用程序,我想有一個菜單項(或工具欄按鈕),帶來了創造一些我的數據的圖表或圖形的紙張。在該表中,用戶將輸入用於創建圖表或圖表的各種參數和選項,然後單擊「確定」(或任何按鈕被調用)。
誰應該菜單項的行動作出迴應,該文件(模型控制器)或窗口控制器(視圖控制器)?實際加載和顯示工作表的任務似乎是「與視圖有關」,因此它應該放在窗口控制器中,對嗎?但是工作表的控制器需要一個模型來顯示給用戶(一個Chart
對象,或者ChartInputs
);該模型在哪裏創建並提供給圖紙控制器?應的文件,以通過創建ChartInputs
模型對象的菜單項作出響應,然後傳遞到窗口控制器,它創建片控制器,向它傳遞模型對象,並且示出了片材?或者,如果窗口控制器響應菜單項,請求一個新的模型對象(可能通過某種工廠通過依賴注入提供給窗口控制器的構造函數),然後繼續創建工作表控制器,傳遞模型並顯示錶單?
怎麼樣的用戶填寫後的薄片,並點擊「OK」?應該在哪裏控制返回來處理用戶的選擇並實際創建圖表 - 窗口控制器,文檔還是兩者?在單擊「確定」之後,但在表單被解除之前(如果某些內容無效),驗證用戶輸入的邏輯如何?