領域驅動設計實踐

  • 文章內容所有來自張逸《領域驅動設計實踐(戰略+戰術)》

領域驅動是什麼

領域驅動設計就是針對軟件開發領域提出的一套系統與理論分析方法,是「一種思惟方式,也是一組優先任務,它旨在加速那些必須處理複雜領域的軟件項目的開發」。領域驅動設計貫穿了整個軟件開發的生命週期,包括對需求的分析、建模、架構、設計,甚至最終的編碼實現,乃至對編碼的測試與重構。
領域驅動設計強調領域模型的重要性,並經過模型驅動設計來保障領域模型與程序設計的一致。從業務需求中提煉出統一語言(Ubiquitous Language),再基於統一語言創建領域模型;這個領域模型會指導着程序設計以及編碼實現;最後,又經過重構來發現隱式概念,並運用設計模式改進設計與開發質量。
image數據庫

戰略設計階段

問題域方面

針對問題域,引入限界上下文(Bounded Context)和上下文映射(Context Map)對問題域進行合理的分解,識別出核心領域(Core Domain)與子領域(SubDomain),並肯定領域的邊界以及它們之間的關係,維持模型的完整性。設計模式

架構方面

經過分層架構來隔離關注點,尤爲是將領域實現獨立出來,可以更利於領域模型的單一性與穩定性;引入六邊形架構能夠清晰地表達領域與技術基礎設施的邊界;CQRS 模式則分離了查詢場景和命令場景,針對不一樣場景選擇使用同步或異步操做,來提升架構的低延遲性與高併發能力。架構

戰術設計階段

整個軟件系統被分解爲多個限界上下文(或領域)後,就能夠分而治之,對每一個限界上下文進行戰術設計。
image併發

演進的領域驅動設計過程

image
戰略設計會控制和分解戰術設計的邊界與粒度,戰術設計則以實證角度驗證領域模型的有效性、完整性與一致性,進而以演進的方式對以前的戰略設計階段進行迭代,從而造成一種螺旋式上升的迭代設計過程。異步

認識分層架構

經典分層架構

image
領域驅動設計分層架構
image微服務

層次 職責
用戶界面/展示層 負責向用戶展示信息以及解釋用戶命令
應用層 很薄的一層,用來協調應用的活動,它不包含業務邏輯,它不保留業務對象的狀態,但它保有應用任務的進度狀態
領域層 本層包含關於領域的信息,這是業務軟件的核心所在。在這裏保留業務對象的狀態,對業務對象和它們狀態的持久化被委託給了基礎設施層
基礎設施層 本層做爲其餘層的支撐庫存在。它提供了層間的通訊,實現對業務對象的持久化,包含對用戶界面層的支撐庫等做用

分層的依據與原則

分層的第一個依據是基於關注點爲不一樣的調用目的劃分層次。
分層的第二個依據是面對變化。
層與層之間的關係應該是正交的。
保證同一層的組件處於同一個抽象層次。高併發

分層架構的演化

分層架構是一種架構模式,但終歸它的目的是爲了改進軟件的架構質量,咱們在運用分層架構時,必需要遵照架構設計的最高原則,即創建一個高內聚、鬆耦合的軟件系統架構。測試

整潔架構

在架構設計時,咱們應設計出乾淨的應用層和領域層,保持它們對業務邏輯的專一,而不摻雜任何具體的技術實現,從而完成領域與技術之間的徹底隔離,這一思想被 Robert Martin 稱之爲整潔架構(Clean Architecture)。
image
領域模型就是業務邏輯的模型,它應該是徹底純粹的。
對下,例如,針對數據庫、消息隊列或硬件設備,能夠認爲是一個南向網關,對於當前限界上下文是一種輸出的依賴;
對上,例如,針對 Web 和 UI,能夠認爲是一個北向網關,對於當前限界上下文是一種輸入的依賴。ui

六邊形架構

image
六邊形架構經過內外兩個六邊形爲系統創建了不一樣層次的邊界。
image
微服務架構
image編碼

相關文章
相關標籤/搜索