REL03-BP02 建置專注於特定業務領域和功能的服務
服務導向架構 (SOA) 會定義服務,具有依商業需求定義的明訂功能。微型服務使用領域模型和有界限的環境,沿著業務環境界限繪製服務界限。專注於業務領域和功能,有助於團隊為其服務定義獨立的可靠性要求。有界限的環境可隔離和封裝商業邏輯,讓團隊更適切地推論如何處理失敗。
預期成果: 工程師和業務利害關係人共同定義有界限的環境,並將其用來設計系統,作為滿足特定業務功能的服務。這些團隊使用既定的做法 (如事件風暴) 來定義要求。新的應用程式設計為服務妥善定義的界限和鬆散耦合。現有的整合型服務分解為 有界限的環境
領域導向服務會以一或多個不共用狀態的程序執行。它們會單獨回應需求的波動,並根據領域的特定要求來處理錯誤情境。
常見的反模式:
-
團隊是依據特定技術領域 (例如 UI 和 UX、中介軟體或資料庫) 組成的,而不是特定的業務領域。
-
應用程式跨多個領域責任。跨有界限環境的服務可能更難以維護,需要較大量的測試工作,且需要多個領域團隊參與軟體更新。
-
領域相依性 (例如領域實體程式庫) 會跨服務共用,因此一個服務領域出現變更時,需要變更其他服務領域
-
服務合約和商業邏輯無法以通用且一致的領域語言來表達實體,因此會導致翻譯層級使系統複雜化,並增加偵錯工作。
建立此最佳實務的優勢: 應用程式設計為獨立的服務,受到業務領域限制,並使用共同的商務語言。服務可以單獨測試和部署。服務符合實作領域的特定恢復能力要求。
未建立此最佳實務時的曝險等級: 高
實作指引
領域驅動決策 (DDD) 是依據業務領域設計和建置軟體的基礎方法。在建置專注於業務領域的服務時,使用現有架構將有所幫助。使用現有的整合型應用程式時,您可以利用分解模式提供已建立的技術,將應用程式現代化為服務。

領域驅動的決策
實作步驟
-
團隊可舉辦 事件風暴
研討會,以便箋格式快速識別事件、命令、彙總和領域。 -
在領域環境中形成領域實體和函數之後,您可以使用 有界限的環境
將領域分成服務,其中具有相似功能和特性的實體會歸類成一組。隨著此模型劃分成多個環境,如何界定微型服務界限的範本便會浮現。 -
例如,Amazon.com 網站實體可能包括包裝、交付、排程、價格、折扣和貨幣。
-
包裝、交付和排程會分組到出貨環境中,而價格、折扣和貨幣則分組到訂價環境中。
-
-
將整合型服務分解為微型服務 概述了重構微型服務的模式。按業務功能、子領域或交易使用分解的模式,會與領域驅動的方法保持一致。
-
戰術 (如 Bubble 環境
) 可讓您在現有或舊版應用程式中導入 DDD,而無須預先重寫和對 DDD 完整承諾。在 Bubble 環境方法中,使用服務對應和協調來建立小型的有界限環境 (或 抗損毀層 ),以保護新定義的領域模型免受外部影響。
在團隊執行領域分析並定義實體和服務合約之後,他們可以利用 AWS 服務將其領域導向設計實作為雲端架構服務。
-
藉由定義執行領域商務規則的測試來起始您的開發。測試驅動的開發 (TDD) 和行為驅動的開發 (BDD) 可協助團隊將服務著重於解決業務問題上。
-
在 AWS 上建置六邊形架構 概述了一個架構,用以將業務邏輯建置到從業務領域回溯運作的服務中,以滿足功能要求,然後附加整合適配器。使用 AWS 服務將介面詳細資訊與商業邏輯分開的模式,可協助團隊專注於領域功能及改善軟體品質。
資源
相關的最佳實務:
相關文件:
相關範例:
相關工具: