2012-02-09 77 views
2

我正在使用MVVM模式來創建一個帶有WPF GUI的.Net軟件。使用IDataErrorInfo對屬性進行驗證,所有字段都點亮。不過,我正在尋找一種實現某種業務邏輯的好方法。什麼是在MVVM中實現邏輯驗證的好方法?

簡單的例子;如果您有一個包含列的表,我使用IDataErrorInfo接口來檢查名稱是否爲空/有效。但我也想確保列名是唯一的。也可能是該列在其他地方正在使用,因此無法刪除。

關於如何使用MVVM實現業務邏輯的任何建議?一直在環顧四周,似乎無法找到'''的解決方案。

+1

經過一番搜索互聯網後,我發現這個網站:http://rachel53461.wordpress.com/2012/01/22/validating-business-rules-in-mvvm/;他們採用了一種有趣的方法,使用IDataErrorInfo接口將業務邏輯驗證相結合。任何人都有這種方法的經驗? – ferdyh 2012-02-09 09:06:00

回答

1

我想推薦這本書(鏈接到Amazon.com): Building Enterprise Applications with Windows Presentation Foundation and the Model View ViewModel Pattern

雖然它只是在其標題MVVM,它提供了範圍廣泛的議題以及可能的方式來組織和結構應用。

我發現了很多有用的想法和建議。

我看到的唯一缺點是它不會太深入單個主題。另一方面,您可以快速閱讀並且不需要按順序閱讀每章,而是專注於您所尋找的內容。

這本書可以幫助您瞭解您想知道的內容的總體概念,以及您可能稍後進一步深入的良好起點。

+0

目前我有一本MVVM書http://www.amazon.com/Developers-Guide-Microsoft-Prism-Applications/dp/073565610X/;不知道這些書是否有很大的不同。這本書我有,我似乎無法找到一個好的解決方案 – ferdyh 2012-02-09 13:31:44

+0

@Ferdy:亞馬遜鏈接提供了一個「看看裏面」。您可能需要查看目錄,將其與您已有的圖書進行比較。我特別想到第5章「業務層」,它提出了構建它的一些考慮。 – 2012-02-09 14:20:47

2

使用MVVM模式時,業務邏輯的位置總是很困難。問題始終是View Model還是Model?

我想這取決於你在哪裏檢查重複。

如果您試圖阻止用戶複製View中顯示的數據,那麼您可以在關聯的View Model中進行檢查。

如果您試圖阻止用戶複製模型中或相關數據層(讀取數據庫)中存在的數據,則應在模型域內執行該數據。

您需要牢記的唯一一件事就是您的代碼將數據提交給View,以瞭解是否存在重複問題,但由View決定是否提供該數據。

很多時候,我將大量的業務邏輯和'助手'函數放在一個單獨的類庫項目中,並從最好的位置調用功能。這可以更輕鬆地將功能從視圖模型切換到模型,反之亦然。

你見過msdn MVVM模式頁嗎?看看here

請記住,儘管如此,所有的事情都需要採取實用的方法。可能有些情況下,將視覺業務邏輯放置在View代碼後面,但應始終保持在最低限度。

+0

+1提到將代碼放置在單獨的lib中。我經常見到人們盲目地堅持使用MVVM導致虛擬機和/或M成長爲尷尬的上帝對象,因爲他們認爲*所有*必須是3個類中的一個(V VM或M) – stijn 2012-02-09 08:52:38

0

在我使用WPF和Silverlight內的MVVM時,業務邏輯通常在可通過各種消費者的服務訪問的域層中實現得更深。就以這種更抽象的方式實施域邏輯而言,根據應用程序的複雜性以及您的業務規則的動態性,存在無數選項。

有人會說域對象的驗證應該發生在IOC可注入驗證服務中,而不是被烘焙到域對象本身中(除非它絕對是核心的,不變的邏輯到你的域)。

我通常會發現這種方法有點矯枉過正。你可以讓你的域對象實現某種驗證接口,這可能會通過整個對象圖鏈接驗證。領域對象可以採用烘焙或動態的方式徵集可共享的業務規則,例如,一個規則,用於檢查域對象及其相關對象的狀態,並將條目添加到一組破壞的業務規則中。

+0

那麼我的實現它的問題更深層的是,我通常喜歡使用現有的功能;例如,WPF使用IDataErrorInfo接口爲錯誤標記字段。不知何故,我想爲我的業務邏輯驗證鉤住。 – ferdyh 2012-02-09 09:10:22

相關問題