2012-09-12 45 views
1

我正在學習可可(而不是ios),我想在我創建的所有代碼中理解和實現MVC。我已經瞭解並理解了這種設計的邏輯,並且我正嘗試在我的應用程序中使用它(從課程和教程等中的非常小的應用程序)。MVC - 模型應該與控制器不同嗎?

大多數教程僅在2個文件中顯示MVC的示例。 Model和appController一起放在一個類/文件(NSObject的一個子類)中,然後顯然在它自己的文件(NSView)中顯示視圖。 但是當我想到MVC時,我總是想到3個文件中的3個類:

類/文件1.模型例如名稱,人物,年齡,數組等。 類/文件2. appController - 腦,例如給人姓名和年齡等...... 類別/文件3.視圖例如在窗口中顯示該人。

那麼模型應該總是在與控制器分開的文件中?

另一個問題是關於溝通 - 在上面的例子中,Model和appController如何共享數據?模型是appController的子類(appController是NSObject的一個子類),所以兩者都可以共享ivars?

感謝您閱讀本文,希望您能澄清我的疑惑。

回答

0

的確,模型比View和ViewController更抽象一些。

該模型可能是一個類,但如果它是一個簡單的模型(也就是說ViewController可以從其他ViewController獲得的單個值),它可能只是在ViewController中。

關鍵是視圖從來沒有擁有自己的數據,它只是顯示它。 講座1 CS193P有很多很好的例證,並擁有下載講座爲PDF here

此外,雖然視圖不應該擁有自己的數據,其中數據被完全從什麼是在視圖派生(例如視圖中的一個框,其大小是從接收到的數據量中導出的),該框大小可以由View在繪製時自行計算出來。

此外,還有一個計算器的例子,這個講座是指here。 我在這些地方學到了很多關於這些概念的知識。我現在只是爲語法而努力。

2

您對這些模型是正確的,這些模型可能是人,新聞等抽象數據類型。您可以說您的業務對象構成了您的模型。視圖是如何表示數據的,例如我必須在tableViewCell中顯示一個新聞項目,我將創建一個包含該新聞的標題,日期和時間的視圖。但是這種觀點不會直接與模型溝通以獲取數據。 在這裏你的控制器,你打電話給大腦,你的控制器知道這個視圖將被顯示。在這種情況下你的控制器擁有模型對象新聞對象。 因此,它將給出從模型對象到視圖的數據以填充視圖。因此,第二個問題的答案就來了,您不需要將模型作爲應用程序控制器的子類。但是你的控制器有你模型的對象。這個對象正處於最後階段。 所以關鍵點是: 模型與控制器是分開的,並查看兩者。 視圖和模型不直接通信。 控制器作爲視圖和模型之間的通信來源。 模型不是appcontroller的子類。您的控制器可能需要建模對象才能使用它。

希望它能澄清你的困惑。

+0

@ Ehsan-謝謝Ehsan - 我真的很感激你在這上面的時間。所以有幾個問題: 對於控制器和模型之間的通信,我還是有點困惑。 當你說,控制器在最後階段有一個模型的對象。你是說我實際上應該在appController中創建模型的實例/對象嗎? 如果是的話,我想如果我從我的appController模型類中的對象,我可以得到我的模型(數組等)的屬性,但不是實際的值(字符串名稱等)! 達姆......因爲我正在寫這篇文章,我正在意識到自己有多困惑! – pete

+0

混亂排序!我忘記了如果我在模型的實現文件中使用init方法初始化我的值,那麼在將模型導入到appController時,可以導入所有值。 – pete

相關問題