2011-12-07 163 views
4

我目前正在對具有相當標準的分離結構這樣一個項目:在MVVM和MVC之間共享模型?

庫 - >服務 - >查看模型 - >查看

資源庫和服務層使用POCO對象。視圖模型是根據這些對象構建的,然後調用服務方法,然後傳遞給視圖。

我有兩個前端項目,一個使用MVC3的Web應用程序和一個使用WPF的桌面應用程序。 視圖模型包含在獨立類庫中,因爲大多數應用程序都是相同的。 (有一些例外,但是這些都是針對每個項目使用特定的虛擬機進行處理的)

目前我處於奠定基礎並且MVC方面都工作的階段。我現在正在看WPF方面,並考慮使用MVVM光工具包。我的問題是:鑑於MVC和WPF應用程序共享視圖模型,MVVM輕工具包(或任何其他工具包)是否合適? MVVM輕工具包不應該與MVC3一起使用嗎?

我搜索了很長一段時間,發現沒有具體的東西。預先感謝您的想法。

回答

5

恕我直言,答案是您將無法在MVVM和MVC之間成功共享ViewModels。儘管它們被稱爲同一件事,但它們非常適合特定的實現。例如,當您爲WPF編寫VM時,您需要實現命令,依靠雙向綁定等,而這些都與MVC無關。 MVVM Light可幫助您使用WPF/SL實現MVVM,而MVC根本就與MVC無關。

我和你的情況類似,除了我的web項目是標準webforms而不是MVC。我在我的.Web和.Desktop項目之間共享我的.Business,.Model項目引用,但顯然,它們都是自己的事情,包含業務結果(如果使用它們的話)。我對WPF非常新鮮,如果我的評估錯誤,我希望有人會糾正我。

+0

感謝您的信息。看了MVVM工具包多一點,我不得不說你可能是對的。它看起來像是針對WPF或基於Silverlight的應用程序。我認爲這對於MVC3來說並不合適。 – Steve

+1

我已經標記爲正確的,因爲在MVC3和WPF應用程序之間共享相同的viewmodel是不可行的。但是,我所做的是擁有一個帶有視圖模型及其所有屬性和驗證的類庫。這些是MVC3使用的視圖模型。然後我擴展其中的每一個以添加所有命令等。這些是WPF使用的視圖模型。這使我的代碼保持乾爽,具有所有必需的好處,而不是在兩個地方定義相同的屬性,驗證等。 – Steve

+0

你能詳細闡述一下你的方法嗎?我面臨着類似的情況,我想在MVC網站上重用我的數據層(POCO類),並通過MVVM for Win8和WindowsPhone公開它們。你是否將inotifychanged的東西添加到底層的POCO?或者在需要MVVM階段的鏈中稍後注入它們? – SelAromDotNet

相關問題