2

愚蠢的问题......但是如果我使用事件溯源,为什么我需要一个域模型。

我有(当然是事件总线)和

  • 具有业务操作的应用程序服务,每个都在基本验证后发送命令
  • 接收命令的命令处理程序执行额外的命令验证并发布事件
  • 处理事件、更新读取模型并将事件存储在存储库(事件源)中的事件处理程序
  • 提供读取模型的读取模型服务
  • 使用读取模型服务中的读取模型的前端(UI 或其他)......并利用应用程序服务进行业务操作。

为什么我需要聚合根和域实体?附加层的作用是什么?

4

3 回答 3

4

你没有。

领域驱动设计是关于使用领域专家无处不在的语言对软件进行建模。该模型可以是“关系”模型,但也可以是命令和事件模型。

最近的一次采访中,Eric Evans 解释说,他希望不再强调战术模式(聚合根、存储库、抽象工厂)等,而是强调建模方法——例如有界上下文

他还解释了 CQRS + Event Sourcing 如何使 DDD 焕然一新。在许多方面,战术模式是过去的残余,在过去,一切都必须是 OOP 并具有底层关系数据库才能被认真对待。那是那时,但这是现在。

于 2015-06-13T20:41:55.763 回答
3

听起来您可能在命令处理程序中做的太多了。需要明确一点 - 命令处理程序的作用是接收命令、加载适当的聚合并将命令发送到聚合中。最后,它抓取聚合可能生成的任何事件,将它们持久化并最终发布它们。这是我在博客上的图表。

CQRS 和 ES 概述

有关典型 CQRS + ES 应用程序的更全面的逐步概述,请查看我的帖子:CQRS + 事件溯源 - 逐步概述

我希望这可以为您解决一些问题。PS。您可能想了解如何为 CQRS 和 ES 创建聚合根。你可以在这里找到那个帖子

于 2015-06-13T18:17:28.217 回答
0

EventSourcing 很简单,您选择如何存储应用程序的状态。如果您没有解决特定问题,您可能不需要域模型,只需创建一个简单的CRUD应用程序即可。域模型是您的应用程序正在解决特定业务问题的域的简化抽象。领域模型是您与您的团队成员和领域专家之间进行交流的工具。我会推荐阅读这本优秀的书,或者下载这个关于领域驱动设计的简短介绍。

于 2015-06-13T20:20:44.613 回答