为每个微服务或边界上下文设计一个域模型,以反映对业务域的理解。
本部分重点介绍更高级的微服务,这些微服务是在需要应对复杂子系统时实现的,或源于具有不断变化业务规则的领域专家知识。 本节中使用的体系结构模式基于域驱动设计(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(域驱动设计)
埃里克·埃文斯 域语言
https://domainlanguage.com/马丁·福勒 域驱动设计
https://martinfowler.com/tags/___domain%20driven%20design.html吉米·博加德 加强您的领域:入门指南
https://lostechies.com/jimmybogard/2010/02/04/strengthening-your-___domain-a-primer/分布式域驱动设计网络研讨会
https://particular.net/webinars/ddd-design-no-nonsense-implementation-guide
DDD 书籍
埃里克·埃文斯 Domain-Driven 设计:解决软件核心的复杂性
https://www.amazon.com/Domain-Driven-Design-Tackling-Complexity-Software/dp/0321125215/埃里克·埃文斯 Domain-Driven 设计参考:定义和模式摘要
https://www.amazon.com/Domain-Driven-Design-Reference-Definitions-2014-09-22/dp/B01N8YB4ZO/Vaughn Vernon。 Implementing Domain-Driven Design(实现域驱动设计)
https://www.amazon.com/Implementing-Domain-Driven-Design-Vaughn-Vernon/dp/0321834577/Vaughn Vernon。 域驱动设计核心理念
https://www.amazon.com/Domain-Driven-Design-Distilled-Vaughn-Vernon/dp/0134434420/吉米·尼尔森 应用域驱动设计和模式
https://www.amazon.com/Applying-Domain-Driven-Design-Patterns-Examples/dp/0321268202/塞萨尔·德拉托雷 使用 .NET 的 N 分层 Domain-Oriented 体系结构指南
https://www.amazon.com/N-Layered-Domain-Oriented-Architecture-Guide-NET/dp/8493903612/阿贝尔·阿弗拉姆和弗洛伊德·马林斯库。 快速完成域驱动设计
https://www.amazon.com/Domain-Driven-Design-Quickly-Abel-Avram/dp/1411609255/Scott Millett,Nick Tune - Domain-Driven 设计的模式、原则和做法
https://www.wiley.com/Patterns%2C+Principles%2C+and+Practices+of+Domain+Driven+Design-p-9781118714706
DDD 训练
- 朱莉·勒曼和史蒂夫·史密斯 Domain-Driven 设计基础知识
https://www.pluralsight.com/courses/fundamentals-___domain-driven-design