2011-04-08 110 views
0

可以說我有一個在UI上更新了一些值的訂單(他們可能是好的/不確定以確保保存)
1.我們如何驗證所做的更改?應該將訂單返回服務層的DTO進行完整性驗證嗎?
驗證完成後?服務如何返回驗證錯誤?我們是否構建了一個ReponseDTO對象並將其返回,如更新實體,域驅動設計

ResponseDTO saveOrder(OrderDTO);

  1. 我們如何更新域實體順序? DTO彙編程序是否負責使用最新的更改來更新訂單實體?

如果我們想象一個典型的分層方法,Web服務器上的ASP .NET,Application Server上的WCF。 訂單表單用網絡上的數據更新並保存時。 WCF收到一個OrderDTO。 現在我們如何更新DTO的訂單?我們是否使用匯編程序來更新來自DTO的更改域對象?像

class OrderDTOAssembler { 
updateDomainObject(Order, OrderDTO) 
} 
+0

我喜歡在這裏使用Command模式,在這種情況下,UI會發出CreateOrderCommand而不是OrderDTO。 – driushkin 2011-04-08 13:50:32

回答

1

我會盡量回答大家的一些問題,從我的經驗,我應該如何接近你的問題。

首先,我不應讓DTO進行任何驗證,但只是普通的POCO DTO通常具有與特定數據類型不同的屬性,因此需要進行某種驗證。我的意思是你必須申請一個整數街道號碼和字符串的街道名稱等

第二點你指出。讓ORDERDTOAssembler從OrderDTO轉換爲Order,反之亦然。這是在應用程序層完成的。

第三我會使用訪客模式Validation in a Domain Driven Design像這個例子。 OrderService將使用IOrderRepository來保存/更新訂單。但是使用visitor-validation方法,OrderService會調用Order.ValidatePersistance(請參閱示例中的鏈接 - 但這是一個在基礎結構層中實現的擴展方法,因爲它具有「db知識」)來檢查其狀態是否有效。如果爲true,那麼我們到IOrderRepository.Save(order)。

最後,如果Order.ValidatePersistance失敗,我們會得到一個或多個BrokenRules消息。這些應該通過ResponseDTO返回給客戶。然後cient可以對消息採取行動並採取行動。這裏的問題可能是你將有一個ResponseOrderDTO消息,但可能(現在只是想到了這一點),你的所有ResponseDTO都可以從ResponseBaseDTO類繼承,該類提供了用於提供BrokenRule消息的必要屬性。

我希望你找到我的想法很有用,祝你好運。

+0

非常感謝BacceSR。我並不是一個人以同樣的方式思考:) – Gopal 2011-04-11 12:32:25