使用 DDD 與 CQRS 模式解決微服務中的商務複雜度

提示

本內容節錄自《容器化 .NET 應用程式的 .NET 微服務結構》電子書,可以從 .NET Docs 取得,也可以免費下載 PDF 離線閱讀。

.NET Microservices Architecture for Containerized .NET Applications eBook cover thumbnail.

設計每個微服務的領域模型,或反映對業務領域了解程度的繫結內容。

本節著重於當您需要解決複雜的子系統時所實作的更進階微服務,或是衍生自領域專家對不斷改變之商務規則知識的微服務。 此節中所使用的架構模式是以領域驅動設計 (Domain-Driven Design,DDD) 以及命令和查詢職責分離 (Command and Query Responsibility Segregation,CQRS) 方法為基礎,如圖 7-1 所示。

Diagram comparing external and internal architecture patterns.

外部架構的差異:微服務模式、API 閘道、彈性通訊、pub/sub 等:內部架構:資料 動/CRUD、DDD 模式、相依性插入、多程式庫等。

圖 7-1. 外部微服務架構與每個微服務的內部架構模式

不過,資料驅動微服務的大多數技術,像是如何實作 ASP.NET Core Web API 服務,或如何使用 Swashbuckle 或 NSwag 公開 Swagger 中繼資料,也適用於以 DDD 模式在內部實作之更進階的微服務。 本節是前面幾節的延伸,因為稍早所述的大部分實務也適用於這裡或任何類型的微服務。

本節會先提供 eShopOnContainers 參考應用程式中所使用之簡化 CQRS 模式的詳細資料。 稍後會對您概要說明 DDD 技術,這些技術可讓您尋找常見的模式,以便在應用程式中重複使用。

DDD 是一個龐大的主題,內含一組豐富的學習資源。 您可以從 Eric Evans 所著 Domain-Driven Design 之類的書籍,以及 Vaughn Vernon、Jimmy Nilsson、Greg Young、Udi Dahan、Jimmy Bogard 和許多其他 DDD/CQRS 專家所提供的其他教材開始著手。 但最重要的是,您需要試著了解如何在專家協助下,將來自交談、白板與領域模型課程的 DDD 技術,應用在您的實體業務領域中。

其他資源

DDD (領域驅動設計)
DDD 書籍
DDD 訓練課程