使用 DDD 和 CQRS 模式处理微服务中的业务复杂性

小窍门

此内容摘自电子书《适用于容器化 .NET 应用程序的 .NET 微服务体系结构》,可以在 .NET Docs 上获取,也可以下载免费的 PDF 以供离线阅读。

适用于容器化 .NET 应用程序的 .NET 微服务体系结构电子书封面缩略图。

为每个微服务或边界上下文设计一个域模型,以反映对业务域的理解。

本部分重点介绍更高级的微服务,这些微服务是在需要应对复杂子系统时实现的,或源于具有不断变化业务规则的领域专家知识。 本节中使用的体系结构模式基于域驱动设计(DDD)和命令和查询责任分离(CQRS)方法,如图 7-1 所示。

比较外部和内部体系结构模式的关系图。

外部体系结构之间的差异:微服务模式、API 网关、弹性通信、发布/子等和内部体系结构:数据驱动/CRUD、DDD 模式、依赖项注入、多个库等。

图 7-1. 外部微服务体系结构与每个微服务的内部体系结构模式

但是,大多数数据驱动微服务的技术(例如如何实现 ASP.NET Core Web API 服务或如何使用 Swashbuckle 或 NSwag 公开 Swagger 元数据)也适用于使用 DDD 模式在内部实现的更高级微服务。 本部分是上一部分的扩展,因为前面介绍的大部分做法也适用于此处或任何类型的微服务。

本部分首先提供有关 eShopOnContainers 参考应用程序中使用的简化 CQRS 模式的详细信息。 稍后,你将大致了解 DDD 技术,以便查找可在应用程序中重复使用的常见模式。

DDD 是一个大主题,其中包含一组丰富的学习资源。 你可以从埃里克·埃文斯的 Domain-Driven 设计 等书籍开始,以及沃恩·弗农、吉米·尼尔森、格雷格·杨、乌迪·达汉、吉米·博加德等许多其他DDD/CQRS 专家的材料。 但最重要的是,你需要尝试通过与具体业务领域专家的对话、白板和域建模会话来学习如何应用 DDD 技术。

其他资源

DDD(域驱动设计)
DDD 书籍
DDD 训练