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

一文搞懂企業(yè)架構(gòu)與DDD的融合

開(kāi)發(fā) 架構(gòu)
TOGAF(The Open Group Architecture Framework)是一個(gè)廣泛采用的企業(yè)架構(gòu)(Enterprise Architecture, EA)框架,由開(kāi)放組(The Open Group)開(kāi)發(fā)和維護(hù)。

今天聊聊企業(yè)架構(gòu)與DDD如何進(jìn)行融合。

企業(yè)架構(gòu)TOGAF

什么是企業(yè)架構(gòu)TOGAF?

TOGAF(The Open Group Architecture Framework)是一個(gè)廣泛采用的企業(yè)架構(gòu)(Enterprise Architecture, EA)框架,由開(kāi)放組(The Open Group)開(kāi)發(fā)和維護(hù)。

它為組織設(shè)計(jì)、規(guī)劃、實(shí)施和治理企業(yè)信息架構(gòu)提供了系統(tǒng)化的方法和工具。TOGAF旨在幫助企業(yè)通過(guò)高效的架構(gòu)管理,實(shí)現(xiàn)業(yè)務(wù)目標(biāo)、優(yōu)化資源利用和增強(qiáng)靈活性。

TOGAF發(fā)展歷程

圖片圖片

如圖展示了從1970年代至2012,企業(yè)架構(gòu)框架和相關(guān)標(biāo)準(zhǔn)的演進(jìn)歷程,其中包括:

? C4ISR (Command, Control, Communications, Computers, Intelligence, Surveillance and Reconnaissance)

? TAFIM (Technical Architecture Framework for Information Management)

? Zachman Framework

? TOGAF (The Open Group Architecture Framework)

? FEAF (Federal Enterprise Architecture Framework)

? DoDAF (Department of Defense Architecture Framework)以及ArchiMate

在此歷程中,美國(guó)各組織和政府部門(mén)陸續(xù)制定并優(yōu)化了各自的企業(yè)架構(gòu)方法論和標(biāo)準(zhǔn),攜手推動(dòng)了企業(yè)架構(gòu)領(lǐng)域的蓬勃發(fā)展。

1970年啟動(dòng)的C4ISR計(jì)劃為軍事和政府架構(gòu)提供了架構(gòu)理論基礎(chǔ)。

1986年開(kāi)始研發(fā)的TAFIM和1987年提出的Zachman框架,標(biāo)志著企業(yè)架構(gòu)實(shí)踐開(kāi)始走向系統(tǒng)化。

1993年,The Open Group成立并著手制定系統(tǒng)標(biāo)準(zhǔn),隨后在1995年發(fā)布TOGAF 1.0,為商業(yè)領(lǐng)域提供了通用的企業(yè)架構(gòu)開(kāi)發(fā)框架。

1996年,美國(guó)聯(lián)邦政府頒布了里程碑式的克林格·科恩法案,要求政府機(jī)構(gòu)(特別是國(guó)防部和財(cái)政部)采用企業(yè)架構(gòu)理論構(gòu)建IT系統(tǒng)。這項(xiàng)法案為政府機(jī)構(gòu)的數(shù)字化轉(zhuǎn)型注入強(qiáng)勁動(dòng)力,顯著提升了其信息化水平。

1997年,C4ISR升級(jí)為AF 2.0版本。1999年,聯(lián)邦企業(yè)架構(gòu)FEAF問(wèn)世,為政府跨部門(mén)整合提供了方法論支持。

進(jìn)入2000年,TOGAF相繼發(fā)布7.0版本(2001年)和8.0版本(2002年),持續(xù)完善其架構(gòu)開(kāi)發(fā)方法。同期,政府部門(mén)推出DoDAF(2003年發(fā)布1.0版)和FEA相關(guān)方法(2002年起持續(xù)更新),兩者形成了良性互動(dòng)。

2006至2008年間,F(xiàn)EA-PMO陸續(xù)發(fā)布FTF、EAAF3.0等成果,DoDAF也更新至1.5版。

2009年,The Open Group發(fā)布TOGAF 9,為企業(yè)架構(gòu)領(lǐng)域帶來(lái)更系統(tǒng)、更靈活的方法體系。同期,DoDAF在2010年更新至2.02版。

2011年,TOGAF 9.1的發(fā)布進(jìn)一步優(yōu)化了框架內(nèi)容,使架構(gòu)師能更順暢地應(yīng)用這一方法論。

為滿(mǎn)足日益增長(zhǎng)的架構(gòu)可視化和建模需求,The Open Group于2008年接管ArchiMate的研發(fā)工作,并在2012年發(fā)布ArchiMate 2.0,為企業(yè)架構(gòu)的表達(dá)和溝通提供了統(tǒng)一的建模語(yǔ)言。

在2022年,TOGAF正式發(fā)布了10版本,這是一次重大更新。TOGAF 10在保持核心框架穩(wěn)定的同時(shí),增強(qiáng)了靈活性和適應(yīng)性,更好地支持?jǐn)?shù)字化轉(zhuǎn)型和敏捷開(kāi)發(fā)等現(xiàn)代企業(yè)需求。

TOGAF通過(guò)吸收政府機(jī)構(gòu)在企業(yè)架構(gòu)實(shí)踐中積累的豐富經(jīng)驗(yàn),不斷完善和沉淀,最終發(fā)展成為一套通用且系統(tǒng)化的企業(yè)架構(gòu)方法論。

這套方法論不僅適用于政府機(jī)構(gòu),還能廣泛應(yīng)用于各類(lèi)企業(yè)和組織。目前,福布斯前50強(qiáng)企業(yè)中有80%采用TOGAF理論,美國(guó)500強(qiáng)企業(yè)中有60%使用這一方法論來(lái)優(yōu)化和改進(jìn)其IT架構(gòu)。

這些數(shù)據(jù)有力地證明了TOGAF在企業(yè)架構(gòu)領(lǐng)域的權(quán)威性和實(shí)用價(jià)值,同時(shí)也凸顯了企業(yè)架構(gòu)理論在現(xiàn)代組織管理和IT治理中的重要地位。

在TOGAF理論中,有四種核心視圖:業(yè)務(wù)架構(gòu)、應(yīng)用架構(gòu)、數(shù)據(jù)架構(gòu)和技術(shù)架構(gòu)。

這四個(gè)架構(gòu)視圖構(gòu)成了企業(yè)整體架構(gòu)的核心。雖然各視圖關(guān)注點(diǎn)不同,但它們相互聯(lián)系、相互支撐,共同構(gòu)建了完整的企業(yè)架構(gòu)體系。如圖2-3所示。

圖片圖片

業(yè)務(wù)架構(gòu)

業(yè)務(wù)架構(gòu)定義了企業(yè)如何將其業(yè)務(wù)戰(zhàn)略轉(zhuǎn)化為結(jié)構(gòu)化的、全面的、多維度的抽象模型。這些模型包括價(jià)值流、業(yè)務(wù)能力、業(yè)務(wù)流程、業(yè)務(wù)對(duì)象和組織架構(gòu),同時(shí)描述了它們與企業(yè)戰(zhàn)略、產(chǎn)品、策略、項(xiàng)目執(zhí)行以及利益相關(guān)者之間的關(guān)系。

應(yīng)用架構(gòu)

應(yīng)用架構(gòu)描述了企業(yè)內(nèi)應(yīng)用系統(tǒng)的結(jié)構(gòu)、行為和相互關(guān)系,以及這些系統(tǒng)如何支持業(yè)務(wù)流程。它既關(guān)注單個(gè)應(yīng)用的架構(gòu)設(shè)計(jì),也注重應(yīng)用系統(tǒng)間的協(xié)作方式,確保所有系統(tǒng)能夠協(xié)同運(yùn)作,有效支撐企業(yè)目標(biāo)。

數(shù)據(jù)架構(gòu)

數(shù)據(jù)架構(gòu)明確定義企業(yè)的數(shù)據(jù)管理方式,包括數(shù)據(jù)的收集、存儲(chǔ)、管理和使用。它包括數(shù)據(jù)模型設(shè)計(jì)、數(shù)據(jù)庫(kù)技術(shù)選型,以及數(shù)據(jù)治理機(jī)制的建立與實(shí)施。

技術(shù)架構(gòu)

技術(shù)架構(gòu)描述了支撐企業(yè)業(yè)務(wù)、數(shù)據(jù)和應(yīng)用服務(wù)所需的IT基礎(chǔ)設(shè)施和技術(shù)組件結(jié)構(gòu),包括硬件設(shè)施、軟件包、網(wǎng)絡(luò)系統(tǒng)、技術(shù)中間件、通信設(shè)備和計(jì)算資源等。

企業(yè)架構(gòu)與DDD融合

在前文中,我們已經(jīng)了解了TOGAF企業(yè)架構(gòu)的四大視圖,它們共同構(gòu)成了一個(gè)完整的企業(yè)架構(gòu)框架。

接下來(lái),我們將深入探討領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)(DDD)這一重要方法論,以及它如何與企業(yè)架構(gòu)協(xié)同工作來(lái)解決復(fù)雜的業(yè)務(wù)問(wèn)題。

通過(guò)了解DDD的核心概念和應(yīng)用方式,我們將看到它如何幫助組織更有效地實(shí)現(xiàn)從業(yè)務(wù)戰(zhàn)略到技術(shù)實(shí)現(xiàn)的轉(zhuǎn)化。

DDD是什么

大多數(shù)人初次接觸領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)(DDD)時(shí),通常會(huì)閱讀Eric Evans的《領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)》。這本書(shū)被譽(yù)為DDD的"圣經(jīng)",但許多讀者看完后往往感到困惑,覺(jué)得內(nèi)容深?yuàn)W難懂。

DDD旨在實(shí)現(xiàn)軟件系統(tǒng)與業(yè)務(wù)的緊密對(duì)接,提高開(kāi)發(fā)效率和質(zhì)量,同時(shí)更好地應(yīng)對(duì)復(fù)雜性和變化。它將業(yè)務(wù)置于核心地位,通過(guò)深入把握領(lǐng)域知識(shí)并建立有效的領(lǐng)域模型,來(lái)指導(dǎo)軟件設(shè)計(jì)和開(kāi)發(fā)過(guò)程。

具體而言,DDD的核心理論包括:

? 分治思想:DDD應(yīng)對(duì)復(fù)雜性的核心理念是"分而治之"。它將復(fù)雜的業(yè)務(wù)領(lǐng)域劃分為較小的子域,并在每個(gè)子域中明確上下文邊界和核心實(shí)體等要素。通過(guò)這種系統(tǒng)化的分解、分類(lèi)和推導(dǎo)過(guò)程,最終形成最優(yōu)解決方案。

? 領(lǐng)域建模:DDD的核心在于將業(yè)務(wù)流程抽象化,通過(guò)定義領(lǐng)域?qū)嶓w、領(lǐng)域服務(wù)和領(lǐng)域事件等要素來(lái)滿(mǎn)足業(yè)務(wù)需求。作為貫穿整個(gè)軟件生命周期的方法論,領(lǐng)域模型讓開(kāi)發(fā)人員、產(chǎn)品經(jīng)理和架構(gòu)師能夠基于統(tǒng)一的模型進(jìn)行設(shè)計(jì)和討論,確保項(xiàng)目始終保持正確方向。

? 架構(gòu)分層:DDD采用清晰的分層架構(gòu),將應(yīng)用程序分為用戶(hù)接口層、應(yīng)用層、領(lǐng)域?qū)雍突A(chǔ)設(shè)施層四個(gè)主要層次。每一層都具有明確的職責(zé)和功能定位。這種分層架構(gòu)使業(yè)務(wù)領(lǐng)域的結(jié)構(gòu)更加清晰、有序。

? 事件驅(qū)動(dòng):領(lǐng)域事件是一種跨領(lǐng)域的交互機(jī)制,負(fù)責(zé)在不同模塊之間傳遞信息。通過(guò)事件的發(fā)布與訂閱機(jī)制,不僅使領(lǐng)域模型更加簡(jiǎn)潔,還實(shí)現(xiàn)了系統(tǒng)間的低耦合。

DDD與架構(gòu)視圖

在4大架構(gòu)視圖(業(yè)務(wù)架構(gòu)、應(yīng)用架構(gòu)、數(shù)據(jù)架構(gòu)、技術(shù)架構(gòu))和DDD的落地過(guò)程中,存在2個(gè)問(wèn)題:

1. 在業(yè)務(wù)領(lǐng)域劃分環(huán)節(jié),DDD 未提供明確的領(lǐng)域劃分指導(dǎo),如何進(jìn)行合理的領(lǐng)域劃分?

2. 如何基于業(yè)務(wù)架構(gòu)合理劃分應(yīng)用系統(tǒng)結(jié)構(gòu)和抽象數(shù)據(jù)模型?

業(yè)務(wù)架構(gòu)與DDD方法論的融合能有效解決這兩個(gè)問(wèn)題。

圖片圖片

端到端的業(yè)務(wù)流程包含多個(gè)業(yè)務(wù)場(chǎng)景,每個(gè)場(chǎng)景都需要依賴(lài)不同的業(yè)務(wù)能力。通過(guò)對(duì)業(yè)務(wù)能力進(jìn)行分層抽象,我們可以識(shí)別出各個(gè)層次的業(yè)務(wù)能力,這為領(lǐng)域和子域的劃分提供了重要依據(jù)。

在應(yīng)用架構(gòu)設(shè)計(jì)階段,需要對(duì)應(yīng)用系統(tǒng)結(jié)構(gòu)進(jìn)行劃分。應(yīng)用是一個(gè)可獨(dú)立發(fā)布和部署的單元,可提供一個(gè)或多個(gè)應(yīng)用服務(wù)。在這一過(guò)程中,DDD中的限界上下文為劃分應(yīng)用結(jié)構(gòu)提供了有效依據(jù):

? 當(dāng)業(yè)務(wù)復(fù)雜度高、用戶(hù)規(guī)模大且團(tuán)隊(duì)規(guī)模大時(shí),應(yīng)用系統(tǒng)需要拆分為微服務(wù),以實(shí)現(xiàn)獨(dú)立部署和維護(hù)。這種情況下,通常一個(gè)限界上下文對(duì)應(yīng)一個(gè)微服務(wù)。

? 相比之下,當(dāng)應(yīng)用系統(tǒng)面向企業(yè)內(nèi)部用戶(hù)時(shí),由于用戶(hù)規(guī)模較小,通常不需要分布式架構(gòu)。這類(lèi)應(yīng)用宜采用較大顆粒度劃分,將多個(gè)相關(guān)的限界上下文整合在一個(gè)應(yīng)用中,以減少系統(tǒng)調(diào)用并降低部署復(fù)雜性。

在數(shù)據(jù)模型設(shè)計(jì)過(guò)程中,DDD的核心概念為數(shù)據(jù)建模提供了重要指導(dǎo):

? 聚合根定義了數(shù)據(jù)訪(fǎng)問(wèn)的邊界,作為一組相關(guān)對(duì)象的統(tǒng)一入口。

? 領(lǐng)域?qū)嶓w是具有唯一標(biāo)識(shí)的業(yè)務(wù)對(duì)象,體現(xiàn)了核心業(yè)務(wù)概念。

? 值對(duì)象則是通過(guò)其屬性來(lái)定義的對(duì)象,它不需要概念上的唯一標(biāo)識(shí)。

這些模型元素共同構(gòu)成了一個(gè)豐富的業(yè)務(wù)概念框架,指導(dǎo)數(shù)據(jù)模型的設(shè)計(jì),確保數(shù)據(jù)模型能準(zhǔn)確反映業(yè)務(wù)領(lǐng)域的復(fù)雜性和內(nèi)在邏輯。通過(guò)將這些概念應(yīng)用到數(shù)據(jù)建模中,我們可以創(chuàng)建出更貼合業(yè)務(wù)需求、結(jié)構(gòu)清晰、易于維護(hù)的數(shù)據(jù)模型。

DDD帶來(lái)的價(jià)值

DDD為企業(yè)帶來(lái)多方面價(jià)值,包括提升團(tuán)隊(duì)協(xié)作效率、沉淀業(yè)務(wù)能力和優(yōu)化技術(shù)實(shí)現(xiàn)。讓我們從以下關(guān)鍵方面深入了解DDD在實(shí)踐中的具體價(jià)值與優(yōu)勢(shì):

1、統(tǒng)一語(yǔ)言

業(yè)務(wù)、產(chǎn)品、設(shè)計(jì)和技術(shù)團(tuán)隊(duì)使用統(tǒng)一的業(yè)務(wù)術(shù)語(yǔ)進(jìn)行溝通。無(wú)論是日常交流、設(shè)計(jì)討論、文檔編寫(xiě)、圖表繪制還是代碼開(kāi)發(fā),都采用同一套標(biāo)準(zhǔn)化語(yǔ)言,大幅提升了工作效率。

2、團(tuán)隊(duì)協(xié)作高效

通過(guò)系統(tǒng)化地識(shí)別和分類(lèi)需求,將其劃分為清晰的領(lǐng)域、子域和限界上下文,能有效指導(dǎo)團(tuán)隊(duì)分工協(xié)作,避免職責(zé)混亂。這種劃分可以防止任務(wù)錯(cuò)配,例如將原本屬于技術(shù)團(tuán)隊(duì)A的任務(wù),錯(cuò)誤分配給團(tuán)隊(duì)B。也能避免兩個(gè)團(tuán)隊(duì)重復(fù)開(kāi)發(fā)同一功能,造成資源浪費(fèi)。

3、領(lǐng)域能力沉淀

業(yè)務(wù)能力的可復(fù)用性是衡量軟件架構(gòu)設(shè)計(jì)質(zhì)量的關(guān)鍵指標(biāo)。通過(guò)建立業(yè)務(wù)知識(shí)與模型之間的統(tǒng)一映射關(guān)系,并持續(xù)驗(yàn)證和優(yōu)化這些模型,我們能確保它們準(zhǔn)確反映當(dāng)前業(yè)務(wù)狀況。這種方式讓業(yè)務(wù)知識(shí)能夠通過(guò)模型得到有效傳承,讓團(tuán)隊(duì)新成員能夠準(zhǔn)確理解業(yè)務(wù)邏輯。

4、業(yè)務(wù)與技術(shù)有效融合

傳統(tǒng)開(kāi)發(fā)方式過(guò)分注重?cái)?shù)據(jù)庫(kù)表結(jié)構(gòu)設(shè)計(jì),卻忽略了業(yè)務(wù)模型。DDD則采用相反的策略——先抽象業(yè)務(wù)領(lǐng)域模型,再據(jù)此設(shè)計(jì)數(shù)據(jù)庫(kù)結(jié)構(gòu)。這種方法讓業(yè)務(wù)與技術(shù)真正融合,克服了傳統(tǒng)開(kāi)發(fā)中只關(guān)注數(shù)據(jù)層和接口層的局限性。

DDD的缺點(diǎn)

盡管DDD在構(gòu)建復(fù)雜軟件模型方面具有顯著優(yōu)勢(shì),但這套方法論也存在一些明顯的局限性。

1.學(xué)習(xí)曲線(xiàn)陡峭

DDD包含了限界上下文、實(shí)體、值對(duì)象、聚合和領(lǐng)域事件等一系列復(fù)雜概念和實(shí)踐。掌握這些概念需要投入大量時(shí)間和精力,對(duì)初學(xué)者或習(xí)慣簡(jiǎn)單開(kāi)發(fā)模式的團(tuán)隊(duì)來(lái)說(shuō)尤其具有挑戰(zhàn)性。

2.過(guò)度設(shè)計(jì)的風(fēng)險(xiǎn)

團(tuán)隊(duì)在運(yùn)用DDD概念時(shí),容易陷入過(guò)度設(shè)計(jì)的陷阱。為了完美實(shí)現(xiàn)領(lǐng)域模型,可能會(huì)構(gòu)建過(guò)于復(fù)雜的層次結(jié)構(gòu)和關(guān)系,導(dǎo)致"充血模型"泛濫,甚至演變成"高血壓模型"。這不僅增加了項(xiàng)目的復(fù)雜度,還會(huì)顯著提高開(kāi)發(fā)和維護(hù)成本。

3.實(shí)施成本和時(shí)間

DDD的正確實(shí)施需要投入大量時(shí)間和資源進(jìn)行領(lǐng)域建模,同時(shí)要求與業(yè)務(wù)方保持密切溝通。這種特性在項(xiàng)目初期可能會(huì)放慢開(kāi)發(fā)進(jìn)度,特別是對(duì)需要快速交付的短期項(xiàng)目來(lái)說(shuō),會(huì)帶來(lái)較大壓力。

4.不適用于所有項(xiàng)目

DDD主要適用于業(yè)務(wù)邏輯復(fù)雜、需要長(zhǎng)期發(fā)展和維護(hù)的大型軟件項(xiàng)目。對(duì)于業(yè)務(wù)簡(jiǎn)單或生命周期較短的項(xiàng)目,使用DDD反而會(huì)帶來(lái)不必要的復(fù)雜性和額外投入,因此并不適合。

DDD的核心概念

為DDD的完整設(shè)計(jì)流程,DDD的核心理念由兩個(gè)關(guān)鍵部分構(gòu)成:戰(zhàn)略設(shè)計(jì)和戰(zhàn)術(shù)設(shè)計(jì)。

戰(zhàn)略設(shè)計(jì)專(zhuān)注于宏觀(guān)層面的領(lǐng)域分析和邊界劃分,而戰(zhàn)術(shù)設(shè)計(jì)則著重于微觀(guān)層面的領(lǐng)域模型實(shí)現(xiàn)。

圖片圖片

領(lǐng)域和子域

領(lǐng)域指的是特定的業(yè)務(wù)范圍或問(wèn)題域。在運(yùn)用DDD解決業(yè)務(wù)問(wèn)題時(shí),會(huì)將業(yè)務(wù)領(lǐng)域細(xì)分,并將問(wèn)題限定在特定邊界內(nèi)。在這個(gè)邊界內(nèi),DDD建立領(lǐng)域模型,并通過(guò)代碼實(shí)現(xiàn)這些模型來(lái)解決相應(yīng)的業(yè)務(wù)問(wèn)題。這種方法的核心思想是"分而治之"。

領(lǐng)域可以進(jìn)一步劃分為子域,每個(gè)子域?qū)?yīng)一個(gè)更小的問(wèn)題域或業(yè)務(wù)范圍。DDD本質(zhì)上是一種處理復(fù)雜領(lǐng)域的設(shè)計(jì)方法,它通過(guò)持續(xù)細(xì)分將復(fù)雜的業(yè)務(wù)簡(jiǎn)化,使其更易理解和實(shí)現(xiàn)。

這種方法類(lèi)似于公司的組織結(jié)構(gòu)。以一家互聯(lián)網(wǎng)創(chuàng)業(yè)公司為例,它包含產(chǎn)品研發(fā)部、市場(chǎng)營(yíng)銷(xiāo)部、客戶(hù)服務(wù)部等部門(mén)。領(lǐng)域就像公司的一個(gè)大部門(mén),比如產(chǎn)品研發(fā)部,負(fù)責(zé)產(chǎn)品的設(shè)計(jì)與研發(fā),主導(dǎo)公司的產(chǎn)品方向和策略。

子域則類(lèi)似于大部門(mén)下的小團(tuán)隊(duì)。例如,產(chǎn)品研發(fā)部門(mén)下設(shè)有產(chǎn)品團(tuán)隊(duì)、前端團(tuán)隊(duì)、后端團(tuán)隊(duì)和測(cè)試團(tuán)隊(duì)。每個(gè)子域團(tuán)隊(duì)專(zhuān)注于具體職能任務(wù),共同支撐上級(jí)部門(mén)的目標(biāo)。這種分層確保每個(gè)部門(mén)、團(tuán)隊(duì)和小組都有明確的職責(zé),讓公司運(yùn)作更加有序高效。

同理,在DDD中,通過(guò)劃分領(lǐng)域和子域,軟件研發(fā)團(tuán)隊(duì)能更好地理解和處理復(fù)雜的業(yè)務(wù)需求。各個(gè)層級(jí)雖關(guān)注不同細(xì)節(jié),但通過(guò)協(xié)作完成整個(gè)系統(tǒng)的開(kāi)發(fā)。

核心域、通用域和支撐域

在領(lǐng)域劃分過(guò)程中,子域可根據(jù)其重要性和功能屬性分為核心域、通用域和支撐域。

核心域決定產(chǎn)品和公司的核心競(jìng)爭(zhēng)力,通用域是多個(gè)子域共用的功能域,支撐域則負(fù)責(zé)支持業(yè)務(wù)運(yùn)轉(zhuǎn),但既不直接影響核心競(jìng)爭(zhēng)力,也不包含通用功能。

劃分這三類(lèi)域的主要目標(biāo)是聚焦關(guān)鍵事項(xiàng)。通過(guò)這種劃分,公司能夠清晰區(qū)分不同子域的重要性,從而更有效地分配資源和關(guān)注度,在激烈的市場(chǎng)競(jìng)爭(zhēng)中保持優(yōu)勢(shì)。

以電商領(lǐng)域?yàn)槔?,主要子域包括商品、訂單、用?hù)、支付、物流、客服和數(shù)據(jù)分析。

在電商領(lǐng)域中,核心域直接關(guān)系到業(yè)務(wù)的核心價(jià)值和主要收入,主要包括:

? 商品子域:負(fù)責(zé)管理商品信息,包括展示、分類(lèi)、搜索和推薦等功能,構(gòu)成電商平臺(tái)的基礎(chǔ)。

? 訂單子域:負(fù)責(zé)訂單的創(chuàng)建、修改、查詢(xún)和狀態(tài)管理等,是交易流程的關(guān)鍵環(huán)節(jié)。

? 支付子域:負(fù)責(zé)支付交易處理,包括支付方式管理、狀態(tài)跟蹤和渠道對(duì)接等,是完成交易的核心環(huán)節(jié)。

? 物流子域:負(fù)責(zé)商品配送管理,包括物流公司對(duì)接和配送狀態(tài)跟蹤等,確保商品準(zhǔn)確送達(dá)消費(fèi)者。

? 客服子域:提供客戶(hù)支持服務(wù),包括咨詢(xún)和投訴處理等,解決用戶(hù)使用過(guò)程中的問(wèn)題。

通用域支持多個(gè)業(yè)務(wù)領(lǐng)域的運(yùn)作:

? 用戶(hù)子域:負(fù)責(zé)用戶(hù)信息管理,包括注冊(cè)、登錄和資料編輯等。雖然用戶(hù)管理在多個(gè)系統(tǒng)中都很重要,但在電商系統(tǒng)中主要是支持核心業(yè)務(wù)流程。

支撐域?yàn)楹诵挠蛱峁┲С?,主要涉及決策分析支撐:

? 數(shù)據(jù)分析子域:負(fù)責(zé)業(yè)務(wù)數(shù)據(jù)分析,包括用戶(hù)行為和銷(xiāo)售數(shù)據(jù)分析等,為決策制定和業(yè)務(wù)優(yōu)化提供支持。

限界上下文

在DDD中,限界上下文(Bounded Context)是對(duì)一個(gè)特定業(yè)務(wù)邊界內(nèi)的概念和規(guī)則進(jìn)行統(tǒng)一管理的范圍。它將領(lǐng)域模型的適用范圍、業(yè)務(wù)語(yǔ)言以及規(guī)則約束都界定在一個(gè)相對(duì)獨(dú)立的“上下文”中,以避免概念在不同業(yè)務(wù)場(chǎng)景間的混用或沖突。

在一個(gè)復(fù)雜系統(tǒng)里,不同業(yè)務(wù)子域可能對(duì)同一個(gè)名詞或?qū)嶓w有各自的含義和處理邏輯。若不加區(qū)分,容易出現(xiàn)命名混亂、邏輯沖突等問(wèn)題。通過(guò)劃分限界上下文,可以讓團(tuán)隊(duì)在各自的上下文內(nèi)部使用統(tǒng)一的“業(yè)務(wù)語(yǔ)言”,保持模型的一致性與完整性。

在限界上下文之間,通常還需要定義清晰的協(xié)作關(guān)系和數(shù)據(jù)交換方式。例如通過(guò)上下文映射(Context Map)來(lái)確定上下文之間的接口、依賴(lài)以及團(tuán)隊(duì)之間的協(xié)同策略。這樣可以最大程度減少跨上下文溝通帶來(lái)的復(fù)雜度,也讓每個(gè)上下文能獨(dú)立演進(jìn)。

例如在電商平臺(tái)中,“訂單”一詞在“支付”上下文和“倉(cāng)儲(chǔ)”上下文可能包含不同的信息和規(guī)則。支付上下文關(guān)注付款狀態(tài)、交易金額等,倉(cāng)儲(chǔ)上下文關(guān)注庫(kù)存、物流等。把它們劃分到不同的限界上下文,可以讓每個(gè)上下文的“訂單”實(shí)體都針對(duì)自己需要的領(lǐng)域規(guī)則進(jìn)行優(yōu)化,避免混淆。

實(shí)體

實(shí)體是具有唯一標(biāo)識(shí)的對(duì)象。即使實(shí)體的其他屬性發(fā)生變化,只要其標(biāo)識(shí)(如ID)保持不變,它就仍被視為同一個(gè)實(shí)體。實(shí)體在系統(tǒng)中代表持續(xù)存在的業(yè)務(wù)對(duì)象。實(shí)體具有以下關(guān)鍵特征:

? 標(biāo)識(shí)性:每個(gè)實(shí)體都有唯一標(biāo)識(shí),通常通過(guò)ID或編碼實(shí)現(xiàn)。

? 連續(xù)性:實(shí)體在其生命周期內(nèi)可能經(jīng)歷多種狀態(tài)變化,但標(biāo)識(shí)始終保持不變。

? 區(qū)分性:即使兩個(gè)實(shí)體的所有非標(biāo)識(shí)屬性完全相同,只要標(biāo)識(shí)不同,它們就是不同的實(shí)體。

以電商平臺(tái)的訂單系統(tǒng)為例,每個(gè)訂單實(shí)體都有唯一的訂單號(hào)。即使訂單的屬性(如商品、數(shù)量)或狀態(tài)(如已付款、已發(fā)貨)發(fā)生變化,只要訂單號(hào)相同,它就仍然是同一個(gè)訂單。

值對(duì)象

值對(duì)象是描述事物狀態(tài)或?qū)傩缘膶?duì)象,它沒(méi)有唯一標(biāo)識(shí),且通常不可變。值對(duì)象用于表示對(duì)象的某個(gè)特征,無(wú)需獨(dú)立身份,僅為更完整地描述實(shí)體。值對(duì)象的關(guān)鍵特征包括:

? 無(wú)標(biāo)識(shí):值對(duì)象沒(méi)有唯一標(biāo)識(shí)。它們通過(guò)屬性值定義,通常作為實(shí)體的一部分存在。

? 不可變性:一旦創(chuàng)建,值對(duì)象的屬性就不應(yīng)被修改。若需改變,應(yīng)創(chuàng)建新的值對(duì)象。

? 替換性:由于沒(méi)有唯一標(biāo)識(shí),值對(duì)象可被具有相同屬性的另一個(gè)值對(duì)象完全替代。

舉例來(lái)說(shuō),訂單中的收貨地址(包含省、市、街道和郵編)是值對(duì)象,因?yàn)樗鼪](méi)有獨(dú)立標(biāo)識(shí),僅描述了一個(gè)地理位置。

同樣,訂單的支付金額(包括數(shù)字和貨幣單位)也是值對(duì)象,因?yàn)樗幻枋隽藘r(jià)值的數(shù)量,本身不需要獨(dú)立存在。

聚合與聚合根

在DDD中,聚合是一個(gè)核心概念,它幫助開(kāi)發(fā)者管理復(fù)雜度,尤其是在處理大量相關(guān)對(duì)象時(shí)。聚合由緊密關(guān)聯(lián)的實(shí)體和值對(duì)象組成,是修改和保存數(shù)據(jù)的基本單位。每個(gè)聚合都有一個(gè)倉(cāng)庫(kù),用于保存其數(shù)據(jù)。

聚合包含一個(gè)聚合根和上下文邊界。邊界根據(jù)業(yè)務(wù)需求和內(nèi)聚原則,定義了聚合應(yīng)包含的實(shí)體和值對(duì)象。聚合之間保持松耦合,這種設(shè)計(jì)自然地實(shí)現(xiàn)了微服務(wù)的高內(nèi)聚、低耦合特性。

在DDD分層架構(gòu)中,聚合是領(lǐng)域?qū)拥囊徊糠?。領(lǐng)域?qū)涌砂鄠€(gè)聚合,共同實(shí)現(xiàn)核心業(yè)務(wù)邏輯。實(shí)體在聚合內(nèi)采用充血模型實(shí)現(xiàn)業(yè)務(wù)能力,確保業(yè)務(wù)邏輯的高內(nèi)聚。

跨多個(gè)實(shí)體的業(yè)務(wù)邏輯通過(guò)領(lǐng)域服務(wù)實(shí)現(xiàn),而跨多個(gè)聚合的業(yè)務(wù)邏輯則通過(guò)應(yīng)用服務(wù)來(lái)實(shí)現(xiàn)。

聚合根可以類(lèi)比為部門(mén)負(fù)責(zé)人,既是實(shí)體,也是聚合"部門(mén)"的管理者。作為實(shí)體,它擁有自身的屬性和業(yè)務(wù)行為,執(zhí)行特定的業(yè)務(wù)邏輯。作為管理者,它在聚合內(nèi)部會(huì)協(xié)調(diào)實(shí)體和值對(duì)象,完成業(yè)務(wù)邏輯。

而在聚合間的協(xié)作中,聚合根充當(dāng)對(duì)外接口人。它通過(guò)自身ID關(guān)聯(lián)其他聚合,接收外部請(qǐng)求。訪(fǎng)問(wèn)聚合內(nèi)其他實(shí)體時(shí),必須先經(jīng)過(guò)聚合根,再導(dǎo)航至內(nèi)部實(shí)體,外部對(duì)象無(wú)法直接訪(fǎng)問(wèn)聚合內(nèi)的實(shí)體。

領(lǐng)域服務(wù)

領(lǐng)域服務(wù)用于處理實(shí)體、值對(duì)象或聚合無(wú)法獨(dú)立完成的業(yè)務(wù)邏輯。它專(zhuān)門(mén)封裝跨實(shí)體或跨聚合的復(fù)雜邏輯。領(lǐng)域服務(wù)僅包含純業(yè)務(wù)邏輯,不直接涉及數(shù)據(jù)庫(kù)操作、消息隊(duì)列等具體技術(shù)實(shí)現(xiàn)。

需要將領(lǐng)域服務(wù)與應(yīng)用服務(wù)區(qū)分開(kāi)來(lái)。應(yīng)用服務(wù)位于應(yīng)用層,主要負(fù)責(zé)調(diào)用外部系統(tǒng)和協(xié)調(diào)多個(gè)領(lǐng)域?qū)ο蟮牧鞒?。而領(lǐng)域服務(wù)則專(zhuān)注于領(lǐng)域內(nèi)部的業(yè)務(wù)規(guī)則計(jì)算。領(lǐng)域服務(wù)具有以下特征:

? 跨聚合或跨實(shí)體邏輯:當(dāng)業(yè)務(wù)邏輯需要使用多個(gè)聚合的數(shù)據(jù)或操作,適合將其放在獨(dú)立的領(lǐng)域服務(wù)中。

? 聚焦業(yè)務(wù)邏輯:理想情況下,領(lǐng)域服務(wù)應(yīng)只依賴(lài)領(lǐng)域模型中的接口或抽象模型,而不關(guān)注具體的數(shù)據(jù)庫(kù)、網(wǎng)絡(luò)調(diào)用等基礎(chǔ)設(shè)施細(xì)節(jié)。這樣可以保持領(lǐng)域邏輯的純凈性和可測(cè)試性。

領(lǐng)域事件

在DDD中,領(lǐng)域事件(Domain Event)是一個(gè)核心概念。它表示業(yè)務(wù)領(lǐng)域中發(fā)生的重要事件,這些事件由具體業(yè)務(wù)行為觸發(fā),例如用戶(hù)注冊(cè)、訂單生成或支付完成。領(lǐng)域事件反映了業(yè)務(wù)流程中的關(guān)鍵狀態(tài)變更,對(duì)流程的進(jìn)展具有重大影響。

領(lǐng)域事件在軟件開(kāi)發(fā)中發(fā)揮著關(guān)鍵作用,其重要性主要體現(xiàn)在以下幾個(gè)方面:

1、微服務(wù)解耦

領(lǐng)域事件是微服務(wù)架構(gòu)中實(shí)現(xiàn)服務(wù)解耦的有效工具。通過(guò)將直接調(diào)用轉(zhuǎn)換為異步消息傳遞,它降低了服務(wù)間的緊密依賴(lài),提高了系統(tǒng)的靈活性和可維護(hù)性。

2、數(shù)據(jù)一致性保障

在分布式系統(tǒng)中,數(shù)據(jù)一致性維護(hù)是一項(xiàng)重大挑戰(zhàn)。領(lǐng)域事件通過(guò)記錄業(yè)務(wù)操作,使系統(tǒng)即使在發(fā)生故障時(shí)也能通過(guò)重放事件來(lái)恢復(fù)狀態(tài),從而增強(qiáng)了系統(tǒng)的容錯(cuò)能力。

3、系統(tǒng)可追溯性

領(lǐng)域事件為系統(tǒng)提供了完整的歷史變更記錄。通過(guò)存儲(chǔ)和追蹤這些事件,我們能夠清晰地了解系統(tǒng)狀態(tài)的演變過(guò)程,這對(duì)故障排查、系統(tǒng)優(yōu)化和業(yè)務(wù)分析都具有重要價(jià)值。

4、促進(jìn)業(yè)務(wù)理解

作為領(lǐng)域模型的重要組成部分,領(lǐng)域事件反映了業(yè)務(wù)領(lǐng)域中的關(guān)鍵變化。通過(guò)識(shí)別和捕獲這些事件,開(kāi)發(fā)者能夠更深入地理解業(yè)務(wù)規(guī)則和邏輯,同時(shí)加強(qiáng)研發(fā)人員與業(yè)務(wù)人員之間的有效溝通與協(xié)作。

DDD分層架構(gòu)

DDD分層架構(gòu)是對(duì)傳統(tǒng)三層架構(gòu)的優(yōu)化升級(jí),形成了四層結(jié)構(gòu)。如圖2-6所示,這四層從上到下分別是:用戶(hù)接口層、應(yīng)用層、領(lǐng)域?qū)雍突A(chǔ)設(shè)施層。

圖片圖片

1、用戶(hù)接口層

負(fù)責(zé)管理系統(tǒng)與用戶(hù)的交互。它接收用戶(hù)輸入(如表單數(shù)據(jù)或操作),并將應(yīng)用層的處理結(jié)果通過(guò)Web頁(yè)面或移動(dòng)應(yīng)用界面呈現(xiàn)給用戶(hù)。

2、應(yīng)用層

應(yīng)用層處理業(yè)務(wù)用例和流程相關(guān)的操作,理論上不應(yīng)包含業(yè)務(wù)規(guī)則或邏輯。它位于領(lǐng)域?qū)又希?fù)責(zé)協(xié)調(diào)多個(gè)聚合的服務(wù)和領(lǐng)域?qū)ο?,完成服?wù)的編排與組合。

應(yīng)用層需保持簡(jiǎn)潔,開(kāi)發(fā)時(shí)應(yīng)避免在此放置領(lǐng)域?qū)拥臉I(yè)務(wù)邏輯。若應(yīng)用層過(guò)于復(fù)雜,可能導(dǎo)致領(lǐng)域模型失焦,使微服務(wù)退化為傳統(tǒng)三層架構(gòu),致使業(yè)務(wù)邏輯混亂。

3、領(lǐng)域?qū)?/h4>

領(lǐng)域?qū)邮窍到y(tǒng)的核心,負(fù)責(zé)封裝業(yè)務(wù)概念、邏輯和規(guī)則。它執(zhí)行核心業(yè)務(wù)邏輯,并通過(guò)各種校驗(yàn)確保業(yè)務(wù)的準(zhǔn)確性。領(lǐng)域?qū)影酆细?、?shí)體、值對(duì)象和領(lǐng)域服務(wù)等領(lǐng)域模型對(duì)象。

4、基礎(chǔ)設(shè)施層

基礎(chǔ)設(shè)施層為其他層提供技術(shù)支持和基礎(chǔ)服務(wù),包括數(shù)據(jù)庫(kù)、文件系統(tǒng)、消息中間件和緩存等。

責(zé)任編輯:武曉燕 來(lái)源: 架構(gòu)師湯師爺
相關(guān)推薦

2023-08-24 16:50:45

2021-03-04 00:09:31

MySQL體系架構(gòu)

2022-03-24 08:51:48

Redis互聯(lián)網(wǎng)NoSQL

2024-04-12 12:19:08

語(yǔ)言模型AI

2023-11-21 08:37:09

2022-08-31 08:23:27

SAE日志架構(gòu)

2025-01-16 00:20:41

2021-03-22 10:05:59

netstat命令Linux

2023-09-08 08:20:46

ThreadLoca多線(xiàn)程工具

2023-09-15 12:00:01

API應(yīng)用程序接口

2020-05-15 16:37:13

PowerBI數(shù)據(jù)分析

2023-07-04 08:56:07

指針類(lèi)型Golang

2022-05-05 16:47:24

Docker網(wǎng)絡(luò)空間容器

2023-09-02 21:27:09

2023-05-22 13:27:17

2021-02-28 20:53:37

Cookie存儲(chǔ)瀏覽器

2023-03-06 21:29:41

mmap技術(shù)操作系統(tǒng)

2020-12-07 06:19:50

監(jiān)控前端用戶(hù)

2020-09-03 06:35:44

Linux權(quán)限文件

2021-07-08 10:08:03

DvaJS前端Dva
點(diǎn)贊
收藏

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