如何在下列情況下構建代碼:你在哪裏放置驗證邏輯?
若干業務對象(例如Person,House等)以及它們之間需要驗證用戶輸入(來自文本框)。但願進去之一:
- 每個業務對象
- 的代碼隱藏的WinForms
- 一個單獨的(靜態?)類。
感謝
如何在下列情況下構建代碼:你在哪裏放置驗證邏輯?
若干業務對象(例如Person,House等)以及它們之間需要驗證用戶輸入(來自文本框)。但願進去之一:
感謝
每個業務對象。我經典地使每個實現了一個IValidator接口,它爲對象吐出所有驗證錯誤。
我在這種情況下支持的一種非常廣泛使用的方法是引入視圖模型的概念:聚合所有要在表單中顯示的數據的類,並指定(通過屬性或其他機制)應該對這些數據執行什麼類型的驗證。
這種方法有幾個好處,其中包括:
執行驗證的實際代碼通常位於單獨的驗證類中;您的視圖模型只會規定每條驗證應該如何應用於每條數據。
在業務對象。原因是你希望你的驗證規則是可測試的。如果規則很重要,你會想要用測試覆蓋它們,如果它們不是的話 - 不要首先實現它們。將這種極端情況提供給代碼,其中代碼隱藏非常薄,並且幾乎沒有任何邏輯。這是需要的東西。
一些好的做法在這裏:http://colinjack.blogspot.com/2008/03/domain-model-validation.html
一旦到位,領域模型,用戶界面應該能夠反映模型狀態/輸出的驗證。
我會對此建議,ViewModel的目的是爲視圖的適配器,以便它可以附加到模型。也就是說,在WinForms中,你通常沒有ViewModel。 ViewModel儘管名稱是* view *的一部分,而不是模型。因此我會避免將驗證邏輯放在那裏。 – vidstige
有趣的問題!這確實很容易在模型中處理。也許超出了這個評論領域的範圍,但是例如這個政策可以被注入到ViewModel中。這樣你有一個ViewModel,因爲你有一個窗體,ViewModel有兩個*模型。 – vidstige