為每個微服務或限定內容設計定義域模型,以反映對商務領域的瞭解。
本節著重於當您需要處理複雜子系統時所實作的更進階微服務,或衍生自具有不斷變化的商務規則領域專家知識的微服務。 本節中使用的架構模式是以網域驅動設計 (DDD) 和命令和查詢責任隔離 (CQRS) 方法為基礎,如圖 7-1 所示。
外部架構之間的差異:微服務模式、API 閘道、復原通訊、pub/sub 等,以及內部架構:數據驅動/CRUD、DDD 模式、相依性插入、多個連結庫等。
圖 7-1。 外部微服務架構與每個微服務的內部架構模式
不過,大部分數據驅動微服務的技術,例如如何實作 ASP.NET Core Web API 服務,或如何使用 Swashbuckle 或 NSwag 公開 Swagger 元數據,也適用於使用 DDD 模式在內部實作的更進階微服務。 本節是先前各節的延伸模組,因為先前所述的大部分做法也適用於這裡或任何類型的微服務。
本節會先提供 eShopOnContainers 參考應用程式中所使用簡化 CQRS 模式的詳細數據。 稍後,您將取得 DDD 技術的概觀,讓您能夠尋找可在應用程式中重複使用的常見模式。
DDD 是一個大主題,其中包含一組豐富的學習資源。 您可以從埃裡克·埃文斯的《Domain-Driven 設計》等書籍開始,以及沃恩·弗農、吉米·尼爾松、格雷格·楊、烏迪·達漢、吉米·博加德和其他許多 DDD/CQRS 專家的材料。 首先,您需要努力學習如何透過與具體業務領域專家的交談、白板演示以及領域建模會議來應用 DDD 技術。
其他資源
DDD (Domain-Driven 設計)
埃裡克·埃文斯 網域語言
https://domainlanguage.com/馬丁·福勒 Domain-Driven 設計
https://martinfowler.com/tags/domain%20driven%20design.html吉米·博加德 加強您的專業領域:指南入門
https://lostechies.com/jimmybogard/2010/02/04/strengthening-your-domain-a-primer/分散式 Domain-Driven 設計網路研討會
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: 實作 Domain-Driven 設計
https://www.amazon.com/Implementing-Domain-Driven-Design-Vaughn-Vernon/dp/0321834577/Vaughn Vernon: Domain-Driven 設計精華
https://www.amazon.com/Domain-Driven-Design-Distilled-Vaughn-Vernon/dp/0134434420/吉米·尼爾森 套用 Domain-Driven 設計和模式
https://www.amazon.com/Applying-Domain-Driven-Design-Patterns-Examples/dp/0321268202/塞薩爾·德拉托雷 使用 .NET 的多層式 Domain-Oriented 架構指南
https://www.amazon.com/N-Layered-Domain-Oriented-Architecture-Guide-NET/dp/8493903612/阿貝爾·阿弗拉姆和弗洛德·馬林斯庫。 快速設計 Domain-Driven
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