2011-05-03 32 views
8

我正在閱讀MVVM,並且對於我的生活無法說明MVVM的'model-view'與MVC中的'controller'有什麼不同,正如Cocoa編程中所使用的。.Net中的MVVM與可可中的MVC有什麼不同?

我甚至看了一些解釋,即是所謂「啊哈」給別人的時刻,也仍然沒能趕上差異。我所做的有限的Cocoa GUI編程涉及將控制器視爲管理從視圖到模型的數據的中心點,並使用鍵值觀察來處理數據。

在所有重要的方面,這似乎是'模型視圖'的作用,除了它可能是一個微妙的實現差異,與WPF < - > C#橋.Net。也就是說,如果Cocoa GUI是用不同於應用程序代碼的語言指定的,則Cocoa中的MVC可能被稱爲MVVM,並且控制器使用與GUI相同的語言編碼,而不是應用程序(即,WPF在XAML中指定,而不是C#)。或者可能是非Cocoa環境中的MVC,沒有所有的鍵值觀察等等,都與MVC在Cocoa中的應用截然不同,這使得人們發現MVVM和MVC之間的差異比我大。

我瘋了嗎?請教育我。

+0

閱讀關於如何接受答案:http://www.stackoverflow.com/faq#howtoask。如果您沒有正確的答案,請編輯您的問題並添加更多信息。 – jgauffin 2011-05-03 05:49:21

+0

可能的重複項:http:// stackoverflow。com/questions/667781/what-is-the-difference-between-mvc-and-mvvm – Arjang 2011-05-03 05:50:07

+2

我讀過這個帖子。我不認爲它是重複的,因爲當它涉及到'常見的MVC'模式時,我不確定這是否指的是在Cocoa + Obj-C中實現的MVC。多做一點研究,似乎Apple的MVC更像MVP,而MVVM是MVP中的一個微妙轉折,涉及使用GUI特定語言設計GUI ...... – Cyclone 2011-05-03 05:52:50

回答

13

我一直MVVM一個巨大的風扇在WPF多年了,並且最近在可可拿起MVC。起初他們看起來是一樣的,然後是相似的,而現在我更喜歡Cocoa,沒有任何相似之處。

我的感覺是差異是在綁定的方向。

在MVVM中,視圖綁定到ViewModel對象(V - > VM)上的屬性。更改ViewModel對象的屬性,並用一些使用NotifyPropertyChanged的jiggery-pokery,View自動更新它自己。視圖被動地讀取視圖模型對象中的屬性,而ViewModel完全不瞭解視圖 - 你可以刪除視圖,它仍然可以工作。這使您可以靈活地重寫,更改或組合視圖,並讓它們「只是工作」,而無需更改視圖模型代碼。

在Cocoa(iOS)下的MVC中,視圖控制器通過顯式的IBAction/IBOutlet屬性將自身綁定到視圖(VC-> V) - 您在視圖控制器中直接引用視圖對象。你直接告訴一個控件在你的視圖控制器中改變視圖,並且ViewController有關於視圖內部的知識。刪除視圖,ViewController將拋出運行時異常。

對我來說,這是關於綁定的方向。

隨着使用MVC模式可可,你是直接「控制」通過視圖控制器的視圖(不符合邏輯吧?)。

在MVVM/WPF中,您遇到的視圖控件更新本身通過觀察更改視圖模型對象 - 綁定周圍和被動的其他方式。

WPF沒有MVVM就像可可MVC的iOS和感覺有點像ASP.NET表單。

可可的OSX確實有提供更MVVM樣結合的策略,但是這不適用於iOS。

+3

這似乎與我發現的相符。當我第一次發現MVVM Web應用程序的Knockout.js框架時,我最初問這個問題。我從MVVM中發現的問題是,綁定的方向會鼓勵視圖中的小代碼段或ViewModel上的無關屬性來簡化綁定。最後,我經常最終使用MVC,因爲我認爲可以用可觀察的值來公平地說,「神奇地」更新UI。對於視圖控制器在未綁定時拋出異常的情況...不會因爲將消息發送給nil而忽略它們嗎? – Cyclone 2012-02-22 04:29:29

相關問題