結合領域事件和微服務的實現領域驅動設計 - Alagarsamy
INDU Alagarsamy最近在 QCon大會紐約2019大會談到如何使用定義良好的限界上下文和事件相結合開發微服務,從而能靈活地適應業務的變化。
當你開始在乾淨和明確定義的有界上下文之間使用訊息傳遞技術進行通訊時,你可以刪除時間耦合。有界上下文提供了清晰度,每個有界上下文中的模型在邏輯上是一致的,並且可以自由發展。
例如電子商務應用程式的用例,其中“產品”是核心實體之一。產品實體是基於上下文的,對不同的域團隊意味著不同的事情,如下所示:
- 銷售:這是一個有描述,影像和價格的東西
- 庫存:這是一個可用或不可用的東西
- 運輸:這是一件需要包裝的重量和尺寸的東西
建立統一模型很難,在業務領域之間找到正確的界限可能是一個挑戰。她建議可以根據團隊和部門拆分領域模型,以幫助更好地組織模型。它也可以根據系統中的業務流程進行拆分。
Alagarsamy討論了有界上下文之間如何透過命令和事件相互通訊。事件作為不同有界上下文之間的通訊機制是有用的。它們有助於最小化有界上下文之間的時間耦合。命令可在一個有界上下文內用作通訊方式。一旦為事件和命令建模,編寫程式碼就會變得簡單得多。在需求收集階段,在業務需求描述中查詢關鍵詞“when”; 這通常表示業務活動或事件。
使用航空公司應用程式的例子,當飛機型別改變時:
- 透過新的預訂建議通知乘客
- 乘客可以取消航班
- 乘客可以接受建議的預訂
事件和訊息如何與應用程式中的業務流程相關聯?業務流程可以由來自不同有界上下文的事件觸發。多條訊息可以參與業務流程。在設計訊息時,使它們不可變,即擺脫公共 setter函式。而是在領域類的建構函式中設定屬性。
Saga模式可用於管理在同一事務中的多個訊息。該模式允許您在業務流程中的任何步驟不成功的情況下采取補償措施。
事件風暴是整體需求分析工作中的另一個關鍵步驟。它是開發團隊與業務利益相關者用於探索複雜業務領域的協作技術。使用事件風暴技術進行領域建模有助於識別事件發生的時間以及應用程式應採取的操作。這些即是命令與事件。
對域模型中的各種元素使用適當的命名約定也很重要。為程式碼處理程式提供正確的名稱,並在程式碼審查和同行評審期間驗證名稱。檢查事件,類和處理程式的語言和命名。
模型並不完美,團隊應該遵循下面這些實踐,以確保他們的領域模型與業務目標和要求保持一致。
- 與領域專家交流。與他們的事件風暴。
- 透過對領域語言的痴迷來進化和重構。
- 爭取自治。使用事件在有界上下文之間進行通訊。
相關文章
- DDD領域驅動設計:領域事件事件
- 微服務領域驅動設計 - semaphoreci微服務
- 領域驅動設計戰術模式--領域事件模式事件
- 戲說領域驅動設計(廿五)——領域事件事件
- 實現領域驅動設計
- 微服務與領域驅動設計,架構實踐總結微服務架構
- 領域驅動設計,中臺與微服務微服務
- 領域驅動設計戰術模式--領域服務模式
- 《實現領域驅動設計》筆記——領域、子域和限界上下文筆記
- 微服務架構設計基礎之領域驅動設計微服務架構
- [.NET領域驅動設計實戰系列]專題二:結合領域驅動設計的面向服務架構來搭建網上書店...架構
- SoftwareMill實現領域驅動設計的經驗REM
- 領域驅動設計之實戰許可權系統微服務微服務
- 理解領域驅動設計
- MasaFramework -- 領域驅動設計Framework
- 領域驅動設計示例
- 領域驅動設計:CQRS 和事件源的強大功能事件
- 領域驅動設計(DDD)實踐之路(二):事件驅動與CQRS事件
- 使用領域驅動設計DDD和CQRS實現身份驗證的微服務原始碼專案微服務原始碼
- 用 F#和EventStore實現DDD領域驅動設計
- 《實現領域驅動設計》筆記——架構筆記架構
- 領域驅動模型DDD(二)——領域事件的訂閱/釋出實踐模型事件
- 在微服務中使用領域事件微服務事件
- 領域驅動設計簡介
- 領域驅動設計核心概念
- JavaScript中的領域驅動設計JavaScript
- 領域驅動設計中的模型模型
- 行為驅動開發(BDD)如何與領域驅動設計(DDD)結合?
- 實現領域驅動設計 - 使用ABP框架 - 建立實體框架
- 領域驅動設計(DDD)實踐之路(一)
- 領域驅動設計實踐——驗證(一)
- 領域驅動設計之實踐與反思
- 領域服務和領域事件如何取捨?或共存?事件
- DDD(領域驅動設計)是微服務體系結構的核心和最重要的基礎 - Prabhat微服務
- 淺談DDD(領域驅動設計)
- 淺談 DDD 領域驅動設計
- 前端開發-領域驅動設計前端
- DDD-領域驅動設計示例