在 DDD 中,我想知道何时应该使用域事件?有适合使用领域事件的情况推荐吗?是否仅适用于最终一致可以接受的情况?
假设在具有 Product、Order、OrderLine 的在线商店示例中,一个 Order 包含多个 OrderLine。一个 OrderLine 和 Product 是一对一的关系,当我创建一个订单的同时,我需要扣除 Product 中的可用金额。我知道有两种方法:
在 OrderService(应用程序服务)中:
- 创建一个新订单,插入数据库
- 对于 Order 中的每个订单行,获取与该 OrderLine 关联的产品,调用 Product.UpdateQuantity()
- 将所有产品保存到数据库
- 注意:对我来说,似乎应用服务在这里完成了大部分工作(创建订单、获取产品、更新产品),可以接受吗?
在订单服务中:
- 创建一个新订单,插入数据库
- 生成一个事件 OrderCreated
- 触发事件处理程序,调用 Product.UpdateQuantity()
- 注:产品数量不保证立即更新
在现实生活中,哪种方式更受欢迎?在这两种情况下,如何处理产品数量的并发更新?如果数量与用户看到结帐屏幕的时间不同,则通知用户失败?
非常感谢