愚蠢的问题......但是如果我使用事件溯源,为什么我需要一个域模型。
我有(当然是事件总线)和
- 具有业务操作的应用程序服务,每个都在基本验证后发送命令
- 接收命令的命令处理程序执行额外的命令验证并发布事件
- 处理事件、更新读取模型并将事件存储在存储库(事件源)中的事件处理程序
- 提供读取模型的读取模型服务
- 使用读取模型服务中的读取模型的前端(UI 或其他)......并利用应用程序服务进行业务操作。
为什么我需要聚合根和域实体?附加层的作用是什么?
愚蠢的问题......但是如果我使用事件溯源,为什么我需要一个域模型。
我有(当然是事件总线)和
为什么我需要聚合根和域实体?附加层的作用是什么?
你没有。
领域驱动设计是关于使用领域专家无处不在的语言对软件进行建模。该模型可以是“关系”模型,但也可以是命令和事件模型。
在最近的一次采访中,Eric Evans 解释说,他希望不再强调战术模式(聚合根、存储库、抽象工厂)等,而是强调建模方法——例如有界上下文。
他还解释了 CQRS + Event Sourcing 如何使 DDD 焕然一新。在许多方面,战术模式是过去的残余,在过去,一切都必须是 OOP 并具有底层关系数据库才能被认真对待。那是那时,但这是现在。
听起来您可能在命令处理程序中做的太多了。需要明确一点 - 命令处理程序的作用是接收命令、加载适当的聚合并将命令发送到聚合中。最后,它抓取聚合可能生成的任何事件,将它们持久化并最终发布它们。这是我在博客上的图表。
有关典型 CQRS + ES 应用程序的更全面的逐步概述,请查看我的帖子:CQRS + 事件溯源 - 逐步概述
我希望这可以为您解决一些问题。PS。您可能想了解如何为 CQRS 和 ES 创建聚合根。你可以在这里找到那个帖子