我用來與實體對象的工作,現在我切換到DDD原則,所以我將開始使用域對象。可以在域對象上使用屬性和IValidatableObject嗎?
我用來裝飾我的實體對象的屬性,如RequiredAttribute
或StringLengthAttribute
。我也習慣在我的實體對象上實現IValidatableObject
。
我的問題是 - 它是可以接受的使用屬性和IValidatableObject
在我的域對象?它是否與DDD一致?謝謝。
我用來與實體對象的工作,現在我切換到DDD原則,所以我將開始使用域對象。可以在域對象上使用屬性和IValidatableObject嗎?
我用來裝飾我的實體對象的屬性,如RequiredAttribute
或StringLengthAttribute
。我也習慣在我的實體對象上實現IValidatableObject
。
我的問題是 - 它是可以接受的使用屬性和IValidatableObject
在我的域對象?它是否與DDD一致?謝謝。
你的域模型應該與企業經營理念才起作用,它不應該有任何直接關係到DAL或視圖。您應用的屬性意味着您使用域模型作爲視圖模型。創建單獨的視圖模型。不要使用描述存儲模型的實體對象作爲您的域的根類。爲您的域對象創建新類。加入其中明確說明商業方法 -
ChangeLastName(string newName)
,而不是obj.LastName = "Some name"
CreateNewPost(string text,string author)
而不是obj.Posts.Add(..)
你可以寫一些推廣方法做映射,像ToViewModel
,或做它的一些else.One有趣的設計/基礎架構模式是CQRS & EventSourcing。它允許你避免映射,但有一些缺點(如聚合之間的交易)。最後 - 在大多數情況下,簡單的CRUD操作更加適合 - 快速,簡單,簡單。
@AntonPutao它仍然沒有回答這個問題。我認爲這個問題已經暗示了視圖模型和領域模型,其中視圖模型映射到領域模型。在域層中,仍然需要重新驗證該屬性是否爲有效的電子郵件地址。這可以通過裝飾具有屬性的屬性並檢查ModelState是否有效來容易地在視圖模型中完成。一旦視圖模型被驗證並將其映射到域模型以供域服務使用,那麼現在上面的問題,在域模型中使用屬性和IValidateable是否可行? – alltej
我相信這回答你的問題http://stackoverflow.com/questions/28395176/should-i-abstract-the-validation-framework-from-domain-layer/28397201#28397201 – plalx