2016-07-30 52 views
0

驗證使用其他型號的事件有哪些選項?使用其他型號進行驗證

購物車例如:

當增加一個購物車項目到購物車,應該有一個檢查,如果該項目沒有賣完呢。

+0

事件採購意義上的事件無法驗證,它們已經發生。 – guillaume31

回答

4

您通常會驗證一個命令,而不是一個事件作爲一個事件應是一種無法改變

在回答問題時,通常要看是什麼過程的業務成本。例如,在你的例子中,訂購已售罄物品的業務的成本是多少?可能很少 - 一封電子郵件稱該商品缺貨,估計需要多長時間。

在這種情況下,您可以對數據使用最終一致的讀取模型,您可以在此處查詢讀取模型/緩存的庫存水平,但接受某些訂單可能會處理缺貨的情況。

如果你有更嚴格的限制,那麼你就必須執行它們,最好通過重塑你的集合體,或有交易和/或阻塞訂購過程。

1

什麼是驗證它使用另一種模式的事件的選項?

A domain event從業務的角度來看是一個重要的事情。這是過去發生的事情,所以不能改變。 在OO中,它通常表示爲Value Object,也就是說,一個不可變的對象,其中有趣的部分是它們的屬性。

通常,這些Domain Events是從Aggregate Root(DDD專業術語)的操作中產生的。 Aggregate Root的客戶端是Application Service(aka用例)。 Application Service收到一個Command對象並基於此,執行Aggregate Root中的操作。

的驗證可能在於原始驗證,對象的驗證和/或組成的對象的驗證。然後負責執行此驗證的對象應該是本身和/或具有驗證中的特定目標的一些對象。

當增加一個購物車項目到購物車,應該有一個檢查 如果該項目是不賣了沒有

按照您的示例對象woulb是:

  • 命令:AddItemToShoppingCartCommand。保存關於要添加的項目的信息,以及例如購物車標識符。
  • 應用服務:AddItemToShoppingCartService
  • 總根:ShoppingCartInventory。我故意在名稱中使用Inventory以明確表示此Aggregate Root滿足不變量「...如果該項目尚未售罄。「

:在我看來,它檢查在Aggregate Root庫存不變,使得總太大我的建議是放寬這個不變的擁抱最終一致性,如果這一點。‘售罄’這是沒有正常發生