2010-01-10 279 views
12

我最近加入了一個使用WPF和MVVM構建胖客戶端應用程序的新項目。我已經開發了從1.1到3.5以及所有主要技術的各種.NET框架的應用程序; WebForms,MVC和WinForms。在我所有的項目中,我都喜歡每一分鐘,但是在這個項目中,我覺得我很掙扎,因此沒有那麼享受。當.NET 3.5在2008年推出時,我非常喜歡學習新的語言特性(LINQ,MVC,Lambda表達式等),並且涉足WPF,所以請不要假設我反對學習新的東西。學習WPF和MVVM

但是這個項目的學習曲線看起來非常陡峭,我覺得在WPF +應用程序的頂部學習MVVM有點令人生畏。儘管我只在短時間內(2周)參與了該項目,但我真的很喜歡WPF,但對MVVM模式感到厭惡。我對MVVM模式的不喜歡可能是因爲我不太瞭解它,並且我覺得我必須編寫大量的「非最佳實踐」代碼才能在我的WinForms日子裏做相對簡單的事情。

所以我的問題是有其他人面臨類似的情況,你堅持與MVVM或在另一個建築方向?

回答

9

我一直在使用WPF自測試版本,我永遠不會回到winforms。對我來說,MVVM是一種理念,它需要大量的工作和紀律來忠實地實施它。它鼓勵在UI和交互邏輯之間完全解耦,這意味着任何代碼都無法使用,這意味着可測試的交互邏輯對於winforms來說非常困難。

與gius相比,我建議你堅持使用普通的WPF和MVVM,特別是如果你剛開始使用WPF。 MVVM和WPF需要掌握很多東西,而這隻會減慢你的進度。但那只是我的個人意見。我總是喜歡分層次學習,而不是試圖一次性學習所有東西,這樣你就可以控制自己,並且對應用程序的工作方式有更多的瞭解。

如果您還沒有這樣做,所以我強烈建議您閱讀MS文章MVVM:

http://msdn.microsoft.com/en-us/magazine/dd419663.aspx

它太棒了,這是誰寫任何代碼WPF我的團隊成員必讀。

我不確定你和你的團隊是如何工作的,但是你需要問自己MVVM是否適合你。如果單元測試/測試驅動和解耦UI是你已經做的或者對你很重要的東西,那麼MVVM肯定是一條好路徑。如果你的團隊對編寫代碼感到高興,並且你不明白爲什麼你應該打擾解耦,那麼不要打擾MVVM,因爲你會發現它會減慢你的速度。就個人而言,後者絕對不是我的選擇。

如果您對WPF或MVVM有任何具體問題,請隨時與我聯繫。

+0

感謝您的回答,MSDN鏈接非常好。 – Kane 2010-01-13 07:24:23

+0

根據我的經驗,這需要很多解決方法,黑客和代碼擴展來忠實地實現MVVM。我希望事實並非如此,但這正是我們目前的立場。 – Damien 2011-04-26 09:30:58

1

我開始學習WPF,很快就遇到了MVVM--它看起來像是一個很好的契合,我堅持下去。值得指出的是,人們實現MVVM的方式似乎有些不同,其中一個關鍵是View-first或ViewModel優先。有些人似乎認爲這是福音的一點 - 我沒有足夠的經驗來決定是否應該這樣做。我傾向於View-first(所以View對ViewModel有一個引用,ViewModel對Model有引用而對另一個方向沒有引用),但我遇到了另一種方式更容易的場景。

爲什麼不發表一些你認爲非最佳實踐的問題。它也可能幫助其他人摔跤這個話題。

另外一個問題:您是否使用MVVM的特定框架?

1

那麼,在使用MVVM之前,我在ASP.NET MVC框架中使用了MVC。模型 - 視圖 - 控制器體系結構非常明顯,所以它幫助我改變了我對標準ASP.NET和WinForms的態度。

MVVM有點「難」理解,但是一旦你意識到WPF與web不同(你作爲用戶迴應視圖而不是控制器),從MVC轉移到MVVM是有意義的。 我建議在Caliburn project的主頁閱讀關於MVVM的文章(左欄,第3部分,MVVM學習) - 這對我有很大的幫助。

關於WPF(Silverlight)應用程序,我強烈建議在PRISM(Composite WPF)和/或Caliburn之上開始構建應用程序 - 儘管從一開始可能會引起混淆,但它仍然是一個更好的選擇,香草WPF(講述他們強迫你使用的做法)。但是要確定的是,一旦你完成了你的第一個WPF應用程序,你將需要從頭開始重寫它。但是,當你學習一項新技術時,這就是它的工作原理。

1

MVVM只是一個設計模式。除非你對WPF感興趣,否則你不需要它。如果您正在學習WPF,我建議您先完成本書,然後瞭解MVVM。如果你嘗試學習兩者,你會嘗試在每個簡單的WPF應用程序中實現MVVM,或者不理解MVVM使用的WPF的某些功能。 P:當我自己面對這個問題時,我得出了這個結論。我仍然不明白ViewModel如何創建一個新的視圖,如果它不知道它。

+0

讓視圖通過命令來完成。 – 2015-09-27 19:55:10

2

我也遇到了類似的情況,我決定走的路線是:

  • 使用的ViewModels對我的看法,但要避免一些MVVM純粹,就像附加行爲(我發現啞和笨重)
  • 使用Magellan MVC framework,它最適合我關於應用程序應該如何表現的心理模型。
0

WPF有一個陡峭的學習曲線。 MVVM也是如此。這解釋了您的感受:掌握XAML和MVVM 試圖同時生成真實世界的應用程序是一項艱鉅的任務。

我已經培訓了像您這樣的.NET開發人員,並幫助他們快速完成該學習曲線。然後裝培訓進入一個快速閱讀本書,你可以在這裏:

它也可以在亞馬遜和各大圖書網站。

對不起,如果這聽起來像自我廣告,但我真的相信這本書是100%適合您的個人資料。