應用架構 DDD

應用架構區別

好的應用架構,都遵循一些共同模式,不管是六邊形架構、洋蔥圈架構、整潔架構、還是 COLA 架構,都提倡以業務爲核心,解耦外部依賴,分離業務複雜度和技術複雜度。

分層架構(Layered Architecture)

分層架構就是將業務應用劃分爲對應的層級模塊。每個層職責不同。

四層結構定義:

優點:

  1. 可降低層級之間依賴;

  2. 利於層級模塊複用;

  3. 安全性高,外部系統只從接口層訪問,統一入口點;

  4. 項目結構清晰,簡單。

常見兩種分層架構圖:

圖一:四層


圖二:五層

六邊形架構(Hexagonal Architecture)

六邊形架構可以理解爲 “去結構化” 的架構,系統內部與外界的交互過程通過適配器來完成,沒有層次,所有交互雙方只知道適配器的存在,不用知曉對方的存在。

六邊形又稱爲端口適配器模式。六邊形架構將系統分爲內部和外部,內部代表具體的業務邏輯,也就是 DDD 中強調的領域模型(其中包含領域服務,對業務概念建立的模型等);外部代表基礎設施和應用等,類似 RESTful API, SOAP, AMQP, 或者數據庫,內存,文件系統,以及自動化測試。 內部和外部之間通過端口通信。端口代表協議,通常是以 API 呈現。端口的具體實現是適配器,負責對接具體的外部系統或內部邏輯。該架構可以非常容易的實現外部替換、依賴倒置、自動測試等功能。

一個端口對應多個適配器,是對一類外部系統的歸納。

適配器分爲主適配器和次適配器:

六邊形架構優點:

整潔架構(Clean Architecture)

整潔架構(又名洋蔥架構 Onion Architecture),六邊形架構的變種。

整潔架構是 Robot C.Martin 在《整潔架構之道》一書中提出來的架構設計思想。它以圓環的形式把系統分成了幾個不同的層次,因此又被稱爲洋蔥架構。

在整潔架構裏,同心圓代表應用軟件的不同部分,從裏到外依次是領域模型、領域服務、應用服務、最外圍是容易變化的內容,如界面和基礎設施(如數據存儲等)。整潔架構是以領域爲中心,不是以數據爲中心。

整潔架構最主要原則是依賴原則,它定義了各層的依賴關係,越往裏,依賴越低,代碼級別越高。外圓代碼依賴只能指向內圓,內圓不知道外圓的任何事情。一般來說,外圓的聲明(包括方法、類、變量)不能被內圓引用。同樣的,外圓使用的數據格式也不能被內圓使用。

各層職責:

優點:

DDD 架構(Domain Driven Design Architecture)

準確地說,DDD 不是架構,而是一種開發思想。 DDD 帶來的最大改變是讓我們得以從 “數據驅動” 轉向 “領域驅動”,讓我們知道領域是應用的核心,其它都是技術細節,隨時可以被替換。

DDD 四層架構見分層架構圖一。

DDD 採用統一語言,避免組件劃分過程中的邊界錯位。讓業務架構和系統架構形成綁定關係,從而建立針對業務變化的高響應力架構。

DDD 基本概念:

COLA 架構 (Clean Object-oriented & Layered Architecture)

一方面 COLA 是一種架構思想,是整合了洋蔥圈架構、適配器架構、DDD、整潔架構、TMF 等架構思想的一種應用架構。

基於擴展點 + 元數據 + CQRS+DDD 的應用架構:擴展性好,貫徹了 OO 思想,有一套完整的規範標準,並採用 CQRS 和領域建模技術,很大程度可降低應用的複雜度。

層級職責:

圖來源:https://blog.csdn.net/significantfrank/article/details/110934799

CQRS 架構

**命令查詢職責分離(CQRS)是指讀取和寫入分別擁有單獨的數據結構。**使用 CQRS 理由是,在複雜領域中,使用單一模型處理讀取和寫入過於複雜,我們可以通過分離模型來簡化設計和實現。

其基本思想在於任何一個對象的方法可以分爲以下兩類:

CQRS 查詢和更新數據(命令)模型不一樣,CQRS 強調的是 command 和 query 訪問的數據模型不同,分別根據 command 與 query 需求的不同特性設計數據模型。命令模型數據變更後,需同步給查詢模型。

在很多系統業務設計上,數據庫裏數據模型很難和業務領域模型一致,所以 DDD 中有領域模型(Domain model)的概念,在領域層轉換成對應的數據庫 DO(Data Object)實體。

優點:

缺點:

參考資料

  1. <中臺落地手記: 業務服務化與數據資產化>

  2. 代碼精進之路: 從碼農到工匠

  3. 領域驅動設計(Thoughtworks 洞見)

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/I6h14qPNQK9-m4KrgGnKqg