2011-10-02 56 views
4

我是MVVM的新手。目前我正在C#中開發一個WPF項目,該項目將有一個SQl服務器後端,我將使用標準的WCF服務與之通信。到目前爲止,我在MVVM上看到的所有教程似乎總是在後端使用一些靜態數據存儲庫,如xml文件。我還沒有看到使用數據庫和數據訪問層的實現,所以我很困惑我的WCF服務在哪裏適合。服務中定義了所有數據對象,服務本身也成爲模型?另外,如何在ViewModel中包含服務,以便設計人員不會拋出錯誤,指出它無法在服務類中創建實例?任何幫助在這裏將不勝感激,因爲我覺得很奇怪,關於這個主題的許多教程忽略了業務線應用程序的最好的實現。如何使用WCF實現MVVM?

PS我想避開WCF RIA服務和Silverlight,因爲Silverlight缺乏對命令的支持,使得我很難遵循(WPF和Silverlight MVVM高效應用開發與Model-View-ViewModel)理解。

+1

如果您是MVVM模式的新手,它可能會幫助您閱讀有關如何創建代碼片段的文章:http://rafapef.blogspot.com/2012/11/CodeSnipetInVisualStudio2012.html因爲很可能您必須在upcomming viewmodels中輸入許多屬性。我希望它有幫助。 –

回答

10

OK,我會盡力讓你加快速度...

首先,我確實認識有關模型,並與WCF暴露的對象模型的問題。他們是一樣的嗎?那麼,爲了簡單起見,我現在想做出這樣的假設。那麼我們不需要客戶端的MVVM的模型部分?取決於...

ViewModel是駕駛座位。我們讓它爲您的WCF服務創建客戶端代理。請求中使用並作爲結果返回的對象使您的模型成爲可能。任何你想在客戶端緩存或不直接與UI綁定的東西都會被放入模型容器類的屬性中。從這些模型屬性中生成可綁定屬性,以便在UI中使用。其他人將只是視圖模型中的直接屬性。

關於WCF和數據訪問層,有幾件重要的事情要認識。首先,您需要在邏輯(信息)模型和物理(數據庫)模型之間進行分離。其中一個原因是將數據庫技術從應用程序中抽象出來。另一個允許你的應用程序/域邏輯和你的物理實現有小的偏差。確保您的(實體)模型類具有足夠的通用性,以支持UI中的更改,而無需爲每次UI更改修改完整的應用程序堆棧。

沒有一個明確的例子很難談論這件事情,所以總結我想請你看看http://aviadezra.blogspot.com/2010/10/silverlight-mvvm-odata-wcf-data.html。我知道,它使用WCF數據服務和SilverLight。不要直接爲我引導這個樣本而生氣,而是讓我大拇指朝下。這就是你想要實現什麼,介紹什麼以及如何考慮設置這樣的應用程序的一個很好的例子。只需用WPF和數據服務通過常規類型的數據合同代替Silverlight,其餘的內容將有助於清晰地理解你的想法。

希望它可以幫助你在你的追求!