偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

DDD分層架構(gòu):有效降低層與層之間的依賴(lài)

開(kāi)發(fā) 架構(gòu)
傳統(tǒng)三層架構(gòu)向 DDD 分層架構(gòu)的演進(jìn),體現(xiàn)了領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)思想的逐步成熟和應(yīng)用。這種演進(jìn)不僅優(yōu)化了架構(gòu)的分層設(shè)計(jì),還提升了系統(tǒng)的靈活性、可維護(hù)性和可擴(kuò)展性。

什么是 DDD 分層架構(gòu)?

DDD(領(lǐng)域驅(qū)動(dòng)設(shè)計(jì))的分層架構(gòu)經(jīng)歷了持續(xù)的演進(jìn)。最初是經(jīng)典的四層架構(gòu);隨后,四層架構(gòu)得到了進(jìn)一步優(yōu)化,實(shí)現(xiàn)了各層與基礎(chǔ)設(shè)施層的解耦;再到后來(lái),在領(lǐng)域?qū)雍蛻?yīng)用層之間引入了上下文環(huán)境(Context)層,從而形成了五層架構(gòu)(DCI,Data-Context-Interaction)

圖片圖片

讓我們來(lái)看一下這張圖。在最早的傳統(tǒng)四層架構(gòu)中,基礎(chǔ)層(Infrastructure Layer)被其他層所依賴(lài),位于架構(gòu)的核心位置。然而,按照分層架構(gòu)的設(shè)計(jì)思想,領(lǐng)域?qū)樱―omain Layer)才是軟件的核心,因此這種依賴(lài)關(guān)系顯然存在問(wèn)題。為了解決這一問(wèn)題,我們引入了依賴(lài)倒置原則(Dependency Inversion Principle, DIP),對(duì)傳統(tǒng)的四層架構(gòu)進(jìn)行了優(yōu)化,成功實(shí)現(xiàn)了各層對(duì)基礎(chǔ)層的解耦。

我們今天講的 DDD 分層架構(gòu)就是優(yōu)化后的四層架構(gòu)。在下面這張圖中,從上到下依次是:用戶(hù)接口層、應(yīng)用層、領(lǐng)域?qū)雍突A(chǔ)層。那 DDD 各層的主要職責(zé)是什么呢?下面我來(lái)逐一介紹一下。

圖片圖片

1. 用戶(hù)接口層

用戶(hù)接口層的主要職責(zé)是向用戶(hù)展示信息并解釋用戶(hù)指令。這里的“用戶(hù)”不僅限于人類(lèi)用戶(hù),還包括程序、自動(dòng)化測(cè)試腳本以及批處理腳本等。

2. 應(yīng)用層

應(yīng)用層是一個(gè)相對(duì)較薄的層次,理論上不應(yīng)包含具體的業(yè)務(wù)規(guī)則或邏輯,而是專(zhuān)注于用例和流程相關(guān)的操作。它位于領(lǐng)域?qū)又?,?fù)責(zé)協(xié)調(diào)多個(gè)聚合的服務(wù)和領(lǐng)域?qū)ο?,完成服?wù)的編排和組合,從而執(zhí)行業(yè)務(wù)操作。此外,應(yīng)用層也是微服務(wù)之間交互的通道,能夠調(diào)用其他微服務(wù)的應(yīng)用服務(wù),實(shí)現(xiàn)跨微服務(wù)的服務(wù)組合和編排。

需要注意的是:在設(shè)計(jì)和開(kāi)發(fā)過(guò)程中,應(yīng)避免將本應(yīng)屬于領(lǐng)域?qū)拥臉I(yè)務(wù)邏輯錯(cuò)誤地放到應(yīng)用層中實(shí)現(xiàn)。如果應(yīng)用層過(guò)于龐大,會(huì)導(dǎo)致領(lǐng)域模型失去焦點(diǎn),久而久之,微服務(wù)可能會(huì)退化為傳統(tǒng)的三層架構(gòu),業(yè)務(wù)邏輯變得混亂不堪。

應(yīng)用服務(wù)位于應(yīng)用層,其職責(zé)包括:

  • 服務(wù)的組合、編排和轉(zhuǎn)發(fā);
  • 處理業(yè)務(wù)用例的執(zhí)行順序以及結(jié)果的組裝;
  • 通過(guò) API 網(wǎng)關(guān)向前端發(fā)布粗粒度的服務(wù);
  • 執(zhí)行安全認(rèn)證、權(quán)限校驗(yàn)、事務(wù)控制;
  • 發(fā)送或訂閱領(lǐng)域事件等。

3. 領(lǐng)域?qū)?/span>

領(lǐng)域?qū)邮菍?shí)現(xiàn)企業(yè)核心業(yè)務(wù)邏輯的關(guān)鍵層次,通過(guò)各種校驗(yàn)手段確保業(yè)務(wù)的正確性。它主要體現(xiàn)領(lǐng)域模型的業(yè)務(wù)能力,用于表達(dá)業(yè)務(wù)概念、業(yè)務(wù)狀態(tài)和業(yè)務(wù)規(guī)則。領(lǐng)域?qū)影酆细?、?shí)體、值對(duì)象、領(lǐng)域服務(wù)等領(lǐng)域模型中的核心對(duì)象。

領(lǐng)域?qū)ο蟮年P(guān)系說(shuō)明

  • 實(shí)體領(lǐng)域服務(wù)是領(lǐng)域?qū)又袑?shí)現(xiàn)業(yè)務(wù)邏輯的主要組成部分。

實(shí)體通常采用充血模型,實(shí)現(xiàn)與其相關(guān)的所有業(yè)務(wù)功能。

當(dāng)某些業(yè)務(wù)功能無(wú)法由單一實(shí)體(或值對(duì)象)實(shí)現(xiàn)時(shí),領(lǐng)域服務(wù)會(huì)介入,組合聚合內(nèi)的多個(gè)實(shí)體(或值對(duì)象),完成復(fù)雜的業(yè)務(wù)邏輯。

4. 基礎(chǔ)層

基礎(chǔ)層貫穿于所有層次,其主要職責(zé)是為其他各層提供通用的技術(shù)支持和基礎(chǔ)服務(wù)。這些服務(wù)包括但不限于:

  • 第三方工具和驅(qū)動(dòng);
  • 消息中間件;
  • API 網(wǎng)關(guān);
  • 文件存儲(chǔ);
  • 緩存服務(wù);
  • 數(shù)據(jù)庫(kù)等。

其中,數(shù)據(jù)庫(kù)持久化是基礎(chǔ)層最常見(jiàn)的功能之一。

基礎(chǔ)層通過(guò)依賴(lài)倒置設(shè)計(jì),封裝基礎(chǔ)資源服務(wù),實(shí)現(xiàn)應(yīng)用層、領(lǐng)域?qū)优c基礎(chǔ)層的解耦。這種設(shè)計(jì)能夠有效降低外部資源變化對(duì)應(yīng)用的影響。

DDD 分層架構(gòu)最重要的原則是什么?

DDD 分層架構(gòu)有一個(gè)重要的原則:每層只能與位于其下方的層發(fā)生耦合。

根據(jù)耦合的緊密程度,架構(gòu)可以分為兩種類(lèi)型:嚴(yán)格分層架構(gòu)松散分層架構(gòu)。

  • 嚴(yán)格分層架構(gòu)
  • 優(yōu)化后的 DDD 分層架構(gòu)模型屬于嚴(yán)格分層架構(gòu)。在這種架構(gòu)中,任何層只能依賴(lài)于其直接下方的層,依賴(lài)關(guān)系清晰且易于管理。例如:

領(lǐng)域服務(wù)只能被應(yīng)用服務(wù)調(diào)用;

應(yīng)用服務(wù)只能被用戶(hù)接口層調(diào)用。服務(wù)是逐層封裝或組合的,依賴(lài)關(guān)系明確,便于維護(hù)和擴(kuò)展。

  • 松散分層架構(gòu):傳統(tǒng)的 DDD 分層架構(gòu)屬于松散分層架構(gòu)。在這種架構(gòu)中,某一層可以依賴(lài)于其下方的任意層,依賴(lài)關(guān)系復(fù)雜且難以管理。例如:
  • 領(lǐng)域服務(wù)可能同時(shí)被應(yīng)用層和用戶(hù)接口層調(diào)用;

  • 核心業(yè)務(wù)邏輯容易外泄,增加了維護(hù)和升級(jí)的難度。

DDD 分層架構(gòu)如何推動(dòng)架構(gòu)演進(jìn)?

1.微服務(wù)架構(gòu)的演進(jìn)

我們了解到領(lǐng)域模型中對(duì)象的層次從內(nèi)到外依次為:值對(duì)象、實(shí)體、聚合限界上下文。

  • 值對(duì)象和實(shí)體的簡(jiǎn)單變更通常不會(huì)對(duì)領(lǐng)域模型和微服務(wù)產(chǎn)生重大影響。
  • 然而,聚合的重組或拆分則可能引發(fā)較大的變化。這是因?yàn)榫酆蟽?nèi)的業(yè)務(wù)功能是高度內(nèi)聚的,能夠獨(dú)立完成特定的業(yè)務(wù)邏輯。

當(dāng)聚合發(fā)生重組或拆分時(shí),業(yè)務(wù)模塊和系統(tǒng)功能往往會(huì)隨之發(fā)生變化。因此,我們可以以聚合為基礎(chǔ)單元,推動(dòng)領(lǐng)域模型和微服務(wù)架構(gòu)的演進(jìn)。

具體來(lái)說(shuō):

  1. 聚合的重組或拆分:聚合可以作為一個(gè)整體,在不同的領(lǐng)域模型之間進(jìn)行重組或拆分。這種調(diào)整能夠更好地適應(yīng)業(yè)務(wù)需求的變化。
  2. 聚合獨(dú)立為微服務(wù):在某些情況下,可以直接將一個(gè)聚合獨(dú)立為一個(gè)微服務(wù)。這種方式能夠進(jìn)一步提升系統(tǒng)的靈活性和可維護(hù)性。

圖片圖片

當(dāng)你發(fā)現(xiàn)微服務(wù) 1 中聚合 a 的功能經(jīng)常被高頻訪問(wèn),以致拖累整個(gè)微服務(wù) 1 的性能時(shí),我們可以把聚合 a 的代碼,從微服務(wù) 1 中剝離出來(lái),獨(dú)立為微服務(wù) 2。這樣微服務(wù) 2 就可輕松應(yīng)對(duì)高性能場(chǎng)景。

在業(yè)務(wù)發(fā)展到一定程度以后,你會(huì)發(fā)現(xiàn)微服務(wù) 3 的領(lǐng)域模型有了變化,聚合 d 會(huì)更適合放到微服務(wù) 1 的領(lǐng)域模型中。這時(shí)你就可以將聚合 d 的代碼整體搬遷到微服務(wù) 1 中。如果你在設(shè)計(jì)時(shí)已經(jīng)定義好了聚合之間的代碼邊界,這個(gè)過(guò)程不會(huì)太復(fù)雜,也不會(huì)花太多時(shí)間。

最后我們發(fā)現(xiàn),在經(jīng)歷模型和架構(gòu)演進(jìn)后,微服務(wù) 1 已經(jīng)從最初包含聚合 a、b、c,演進(jìn)為包含聚合 b、c、d 的新領(lǐng)域模型和微服務(wù)了。

2.微服務(wù)內(nèi)服務(wù)的演進(jìn)

在微服務(wù)內(nèi)部,實(shí)體的方法被領(lǐng)域服務(wù)組合和封裝,領(lǐng)域服務(wù)又被應(yīng)用服務(wù)組合和封裝。在服務(wù)逐層組合和封裝的過(guò)程中,你會(huì)發(fā)現(xiàn)這樣一個(gè)有趣的現(xiàn)象。

圖片圖片

讓我們來(lái)看一下這張圖。在服務(wù)設(shè)計(jì)時(shí),你可能無(wú)法完全預(yù)測(cè)哪些下層服務(wù)會(huì)被多少個(gè)上層服務(wù)組合調(diào)用。因此,領(lǐng)域?qū)油ǔV惶峁┮恍?/span>原子服務(wù),例如領(lǐng)域服務(wù) a、b、c。

然而,隨著系統(tǒng)功能的增強(qiáng)和外部接入的增多,應(yīng)用服務(wù)會(huì)不斷豐富。某一天,你可能會(huì)發(fā)現(xiàn)領(lǐng)域服務(wù) b 和 c 被多個(gè)應(yīng)用服務(wù)頻繁調(diào)用,且它們的執(zhí)行順序基本一致。這時(shí),你可以考慮將 b 和 c 合并,并將應(yīng)用服務(wù)中 b 和 c 的功能下沉到領(lǐng)域?qū)樱葑優(yōu)橐粋€(gè)新的領(lǐng)域服務(wù)(b+c)。

這種演進(jìn)方式不僅減少了服務(wù)的數(shù)量,還降低了上層服務(wù)組合和編排的復(fù)雜度。

三層架構(gòu)如何演進(jìn)到 DDD 分層架構(gòu)?

通過(guò)前面的講解,相信你已經(jīng)對(duì) DDD 分層架構(gòu)的優(yōu)勢(shì)有了清晰的認(rèn)識(shí)。我們可以總結(jié)出以下兩個(gè)最重要的優(yōu)點(diǎn):

  1. 層間松耦合:DDD 分層架構(gòu)通過(guò)解耦各層之間的依賴(lài)關(guān)系,使得我們可以專(zhuān)注于本層的設(shè)計(jì),而無(wú)需過(guò)多關(guān)注其他層。這種設(shè)計(jì)不僅降低了層與層之間的耦合度,還避免了因某一層的改動(dòng)而影響其他層的情況。

  2. 結(jié)構(gòu)清晰,易于升級(jí)和維護(hù):分層架構(gòu)使程序結(jié)構(gòu)更加清晰,升級(jí)和維護(hù)變得更加容易。當(dāng)我們需要修改某一層的代碼時(shí),只要該層的接口參數(shù)保持不變,其他層通常無(wú)需進(jìn)行任何改動(dòng)。即使某一層的接口發(fā)生變化,也只會(huì)影響其直接相鄰的上層,修改工作量較小且風(fēng)險(xiǎn)可控,不會(huì)引發(fā)意外的系統(tǒng)問(wèn)題。

那我們?cè)撛鯓愚D(zhuǎn)向 DDD 分層架構(gòu)呢?不妨看看下面這個(gè)過(guò)程。

傳統(tǒng)企業(yè)應(yīng)用大多是單體架構(gòu),而單體架構(gòu)則大多是三層架構(gòu)。三層架構(gòu)解決了程序內(nèi)代碼間調(diào)用復(fù)雜、代碼職責(zé)不清的問(wèn)題,但這種分層是邏輯概念,在物理上它是中心化的集中式架構(gòu),并不適合分布式微服務(wù)架構(gòu)。

DDD 分層架構(gòu)中的要素其實(shí)和三層架構(gòu)類(lèi)似,只是在 DDD 分層架構(gòu)中,這些要素被重新歸類(lèi),重新劃分了層,確定了層與層之間的交互規(guī)則和職責(zé)邊界。

圖片圖片

讓我們來(lái)看一下這張圖,分析從三層架構(gòu)向 DDD 分層架構(gòu)演進(jìn)的過(guò)程。

1. 演進(jìn)的核心區(qū)域

從三層架構(gòu)向 DDD 分層架構(gòu)的演進(jìn),主要集中在業(yè)務(wù)邏輯層數(shù)據(jù)訪問(wèn)層。

2. 用戶(hù)接口層的變化

DDD 分層架構(gòu)在用戶(hù)接口層引入了 DTO(數(shù)據(jù)傳輸對(duì)象),為前端提供了更多的可用數(shù)據(jù),并提升了展示的靈活性。

3. 業(yè)務(wù)邏輯層的優(yōu)化

DDD 分層架構(gòu)對(duì)三層架構(gòu)的業(yè)務(wù)邏輯層進(jìn)行了更清晰的劃分,解決了三層架構(gòu)中核心業(yè)務(wù)邏輯混亂、代碼改動(dòng)相互影響大的問(wèn)題。具體來(lái)說(shuō):

  • 應(yīng)用層:快速響應(yīng)前端的變化,負(fù)責(zé)服務(wù)的組合、編排和轉(zhuǎn)發(fā)。
  • 領(lǐng)域?qū)?/span>:實(shí)現(xiàn)領(lǐng)域模型的能力,專(zhuān)注于核心業(yè)務(wù)邏輯的表達(dá)。

4. 數(shù)據(jù)訪問(wèn)層的改進(jìn)

在數(shù)據(jù)訪問(wèn)層和基礎(chǔ)層之間,DDD 分層架構(gòu)引入了倉(cāng)儲(chǔ)(Repository)設(shè)計(jì)模式,取代了三層架構(gòu)中的 DAO 方式。倉(cāng)儲(chǔ)模式通過(guò)依賴(lài)倒置原則,實(shí)現(xiàn)了各層對(duì)基礎(chǔ)資源的解耦。倉(cāng)儲(chǔ)分為兩部分:

  • 倉(cāng)儲(chǔ)接口:位于領(lǐng)域?qū)?,定義數(shù)據(jù)訪問(wèn)的契約。
  • 倉(cāng)儲(chǔ)實(shí)現(xiàn):位于基礎(chǔ)層,負(fù)責(zé)具體的數(shù)據(jù)庫(kù)操作。

此外,三層架構(gòu)中通用的第三方工具包、驅(qū)動(dòng)、Common、Utility、Config 等公共資源類(lèi),在 DDD 分層架構(gòu)中被統(tǒng)一放到了基礎(chǔ)層。

5. 演進(jìn)的意義

傳統(tǒng)三層架構(gòu)向 DDD 分層架構(gòu)的演進(jìn),體現(xiàn)了領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)思想的逐步成熟和應(yīng)用。這種演進(jìn)不僅優(yōu)化了架構(gòu)的分層設(shè)計(jì),還提升了系統(tǒng)的靈活性、可維護(hù)性和可擴(kuò)展性。

責(zé)任編輯:武曉燕 來(lái)源: 二進(jìn)制跳動(dòng)
相關(guān)推薦

2024-05-31 12:59:03

2017-11-08 13:31:34

分層架構(gòu)代碼DDD

2023-11-24 07:16:10

DDD微服務(wù)

2022-08-08 13:24:28

整潔架構(gòu)架構(gòu)前端

2023-07-31 08:00:19

2025-02-26 08:46:31

2013-10-28 09:24:34

SDN軟件定義網(wǎng)絡(luò)TCP

2024-05-21 09:26:54

微服務(wù)DDD建模架構(gòu)

2025-01-16 10:38:31

2024-11-27 15:33:17

軟件架構(gòu)DDD

2011-05-31 08:54:37

Android開(kāi)發(fā) 架構(gòu)

2023-07-04 07:53:53

MVCDDD架構(gòu)

2013-04-11 09:43:15

Android創(chuàng)建項(xiàng)目Android開(kāi)發(fā)

2009-03-24 08:44:40

GoogleAndroid移動(dòng)OS

2023-08-02 08:51:46

服務(wù)架構(gòu)分層架構(gòu)

2010-02-04 11:06:14

2010-03-10 12:13:06

IT運(yùn)維管理網(wǎng)絡(luò)拓?fù)?/a>摩卡軟件

2020-04-10 10:43:51

Mobvista云計(jì)算成本云原生

2010-03-15 13:53:20

3層交換機(jī)

2009-01-12 12:50:43

服務(wù)器虛擬化存儲(chǔ)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)