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

提示

此内容摘自电子书《适用于容器化 .NET 应用程序的 .NET 微服务体系结构》,可在 .NET 文档上获取,也可作为免费可下载的 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 是一个大主题,具有一套丰富的学习资源。 开始时可以阅读 Eric Evans 撰写的《域驱动设计》等此类书籍,以及 Vaughn Vernon、Jimmy Nilsson、Greg Young、Udi Dahan、Jimmy Bogard 和许多其他 DDD/CQRS 专家撰写的其他资料。 但最重要的是需要尝试了解如何与具体业务域中的专家配合,从对话、白板和域建模会话应用 DDD 技术。

其他资源

DDD(域驱动设计)
DDD 丛书
DDD 培训
  • Julie Lerman 与 Steve Smith。 Domain-Driven Design Fundamentals(域驱动设计基础知识)
    https://bit.ly/PS-DDD