0
A
回答
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
庫存不變,使得總太大我的建議是放寬這個不變的擁抱最終一致性,如果這一點。‘售罄’這是沒有正常發生
相關問題
- 1. 使用其他手機驗證插件進行電話驗證
- 2. 使用證書或其他身份驗證對web服務進行驗證
- 3. Rails 3.2 - 基於其他模型標準進行驗證
- 4. Grails Spring Security - 使用其他屬性進行身份驗證
- 5. 使用NancyFX進行模型驗證
- 6. Codeigniter:使用JQuery驗證空間和符號進行驗證
- 7. CakePHP:在其他模型/在app_model.php訪問模型驗證銀行編號
- 8. 使用StringLength驗證屬性進行模型驗證
- 9. 使用jQuery驗證插件進行數據類型驗證
- 10. 使用驗證服務進行驗證
- 11. 查看某個型號的詳細信息時,如何驗證其他型號?
- 12. 如何使用Rails使用其他REST身份驗證服務進行設計
- 13. 凡在驗證其他車型
- 14. DataGrid行驗證基於其他行
- 15. 驗證行與其他行在cakephp
- 16. 使用JavaScript進行驗證
- 17. 使用AJAX進行驗證
- 18. 使用AWK進行驗證
- 19. 使用LDAP進行驗證
- 20. 使用GPG進行驗證
- 21. 使用bindin進行驗證
- 22. 使用jsoup進行驗證
- 23. 使用jquery進行驗證
- 24. 使用IDataErrorInfo進行驗證
- 25. 使用Jquery進行驗證?
- 26. 使用doctype進行驗證
- 27. CakePHP使用其他模型驗證和/或保存表單驗證?
- 28. 使用ConfigurationValidator或其他驗證程序驗證Uri
- 29. 無其他驗證的驗證摘要
- 30. 使用AFNetworking進行SSL證書驗證
事件採購意義上的事件無法驗證,它們已經發生。 – guillaume31