2013-02-04 34 views
3

我的域模型中的任何給定實體都有幾個不變量需要執行 - 項目名稱必須至少包含5個字符,某個產品必須存在才能與項目關聯,截止日期不得早於當前日期和時間等。如何避免在域和應用程序層之間重複驗證邏輯?

顯然,我希望客戶端能夠顯示與驗證有關的錯誤消息,但我不想在程序的幾個不同層之間不斷維護驗證規則 - 例如,在小部件,控制器,應用程序服務或命令對象和域中。另外,似乎描述性錯誤消息是與表示相關的,而不屬於域層。我該如何解決這些困境?

+0

可能重複的[DDD&客戶端驗證](http://stackoverflow.com/questions/6966288/ddd-client-side-validation) – eulerfx

回答

1

我會創建與您預期的錯誤條件相關的特定異常。這是一般的異常處理標準,可以幫助解決您的問題。例如:

public class ProjectNameNotLongEnoughException : System.Exception

public class DueDatePriorToCurrentDateException : System.Exception

馬克在方法的XML註釋,這些可能的例外,可能把他們讓寫對你的域模型的應用程序就知道要提防對於這些例外情況,將能夠在應用程序的演示文稿中呈現消息。這也使您能夠根據文化背景確定本地化的錯誤消息,而不會讓您的域模型出現問題。

如果你選擇執行客戶端驗證,恐怕你不能擁有你的蛋糕,也不能吃它。在這種情況下,您可能必須複製驗證邏輯才能在維護架構的同時獲得所需的功能。

希望這會有所幫助!

+0

提及本地化錯誤消息的大+1,沒想到的翻譯問題。 – tuespetre

-1

儘管描述性錯誤消息看起來似乎與業務呈現相關,但描述性錯誤消息實際上體現了域模型中包含的業務規則 - 並且在拋出任何類型的異常時,最好通過沿着一些描述性的信息。這條消息可以重新放在圖層上,最終顯示給用戶。

現在,當涉及到搶先驗證(例如允許用戶只鍵入某些字符或從一定範圍的選項中選擇的小部件)時,實體可能包含一些常量或返回動態生成的正則表達式的方法這可以被視圖模型利用並由小部件實現。

相關問題