學(xué)AI,好工作 就找北大青鳥
關(guān)注小青 聽課做題,輕松學(xué)習(xí)
周一至周日
4000-9696-28

DDD,領(lǐng)域驅(qū)動設(shè)計究竟是什么?

來源:北大青鳥總部 2023年08月22日 14:02

摘要: 在互聯(lián)網(wǎng)的萌芽時代,我們倡導(dǎo)能滿足用戶的基本需求即可;在互聯(lián)網(wǎng)的野蠻生長時代,大量網(wǎng)民涌入互聯(lián)網(wǎng),我們倡導(dǎo)能滿足不同用戶的不同需求;在互聯(lián)網(wǎng)的穩(wěn)定成熟時代,互聯(lián)網(wǎng)之爭也變?yōu)榫W(wǎng)民時間的爭奪,這時候倡導(dǎo)“精細化運營”。

在互聯(lián)網(wǎng)的萌芽時代,這會兒互聯(lián)網(wǎng)還剛剛誕生,我們倡導(dǎo)“有即可”,能滿足用戶的基本需求即可;在互聯(lián)網(wǎng)的野蠻生長時代,這會兒已經(jīng)大量的玩家和網(wǎng)民涌入互聯(lián)網(wǎng),我們倡導(dǎo)“小步快跑,快速迭代”,能滿足不同用戶的不同需求;在互聯(lián)網(wǎng)的穩(wěn)定成熟時代,這會兒互聯(lián)網(wǎng)紅利已經(jīng)薅的差不多了,網(wǎng)民就那么多,互聯(lián)網(wǎng)之爭也變?yōu)榫W(wǎng)民時間的爭奪,這時候我們倡導(dǎo)“精細化運營”。

與“有即可”匹配的架構(gòu)設(shè)計思想是單體架構(gòu),與“快速迭代”匹配的架構(gòu)設(shè)計思想是SOA架構(gòu),而與精細化運營匹配的架構(gòu)設(shè)計思想便是DDD領(lǐng)域驅(qū)動設(shè)計(DomainDriver Design)。那么為什么會有DDD出現(xiàn)?它解決什么問題呢?它是什么樣?


01為什么會有DDD出現(xiàn)?

技術(shù)架構(gòu)不匹配業(yè)務(wù)發(fā)展要求。在早期的時候,互聯(lián)網(wǎng)剛剛出現(xiàn),我們的要求都很低,功能也很簡單,只要增、刪、改、查即可。所以那會兒的業(yè)務(wù),只要用PHP寫個程序、連接Mysql數(shù)據(jù)庫、搭在Linux系統(tǒng)之上就可以運行起來。于是乎就出現(xiàn)了一個模塊里包含多個功能。

比如在電商平臺中的訂單服務(wù),我們把下訂單、支付、售后、評價等都放在里面,早期的時候功能很簡單,只維護訂單服務(wù),只CRUD訂單大表即可。但是隨著業(yè)務(wù)的發(fā)展,當(dāng)我們只想改支付功能或評價功能時,就不能輕易做改動了,因為改動支付的時候,有可能影響到售后。通過大量的測試雖然可以避免此類問題,但是投入的人力物力高。而DDD便可以很好的解決掉這個問題。


02DDD解決了什么問題?

在第一個問題中,我們可以看到答案很顯然是系統(tǒng)架構(gòu)設(shè)計不清晰,系統(tǒng)模塊高耦合、低內(nèi)聚。DDD提出以領(lǐng)域驅(qū)動設(shè)計的思想進行業(yè)務(wù)架構(gòu)設(shè)計(根據(jù)業(yè)務(wù)需求設(shè)計業(yè)務(wù)模塊)、系統(tǒng)架構(gòu)設(shè)計(設(shè)計系統(tǒng)、子系統(tǒng))、技術(shù)架構(gòu)設(shè)計(采用技術(shù)及相關(guān)框架),將業(yè)務(wù)架構(gòu)映射到系統(tǒng)架構(gòu)上,業(yè)務(wù)需求變化時,系統(tǒng)架構(gòu)也能隨之變化。

在保證整個系統(tǒng)的相關(guān)人員(設(shè)計人員、開發(fā)人員、測試人員、維護人員)都在同一個認知上討論事情的同時,也能快速高效響應(yīng)業(yè)務(wù)需求。通過將業(yè)務(wù)架構(gòu)映射到系統(tǒng)架構(gòu)上,DDD所呈現(xiàn)的系統(tǒng)必然是高內(nèi)聚、低耦合的,即在業(yè)務(wù)系統(tǒng)中,修改A模塊并不會影響B(tài)模塊正常使用。


03DDD是什么樣?

在DDD中有一些關(guān)鍵名詞,我們先來理解一下。領(lǐng)域,即某個有邊界的業(yè)務(wù)的抽象,反應(yīng)業(yè)務(wù)需求的本質(zhì);限界上下文,界定領(lǐng)域的邊界;實體,即有唯一標識的對象,是一個持續(xù)存在、更新的生命,一般一個領(lǐng)域一個實體;值對象,即描述事物的對象,沒有唯一標識;聚合,即一組相關(guān)的被視為整體的對象;聚合根,聚合的對象,外部對象訪問聚合只能通過聚合根訪問。進行DDD設(shè)計的步驟一般包含5步:

1.根據(jù)需求劃分出領(lǐng)域、限界上下文;

2.分析每一個限界上下文中的實體、值對象;

3.聚合實體、值對象,劃分出聚合范圍、聚合根;

4.設(shè)計聚合根的倉儲;

5.實際操作,不斷反饋,迭代模型。不過只談概念不實踐,便是耍流氓。

那我們以設(shè)計一個秒殺系統(tǒng)為例,來看看DDD如何進行設(shè)計實踐?


產(chǎn)品需求:在除夕夜當(dāng)天舉辦一個秒殺活動,所有參加的商品都以超低價賣出,比如iPhone12、Macbook等,時間是20:00開始,先到先得,售完為止。拿到這樣的一個需求時,首先我們根據(jù)使用用戶可以拆分成兩個領(lǐng)域,User活動域、Manager管理域。在User域,用戶的整體使用路徑包含參加活動、瀏覽商品、購買商品、售后評價,在這其中涉及到的領(lǐng)域包含活動子域、支付子域、庫存子域、售后子域,為了保障刷單等行為不發(fā)生,我們還需要風(fēng)控子域。通過DDD的明確領(lǐng)域劃分,我們可以確定秒殺活動準入、支付、庫存、風(fēng)控的上下文,每個上下文對內(nèi)高度內(nèi)聚、對外低度耦合。

領(lǐng)域驅(qū)動設(shè)計(DomainDriverDesign)是一種新的軟件設(shè)計方法論,它的思想是使用統(tǒng)一的語言將業(yè)務(wù)進行劃分,保障開發(fā)人員、設(shè)計人員在交流時是針對同一個事務(wù)進行溝通,產(chǎn)品的業(yè)務(wù)架構(gòu)能夠完全映射到技術(shù)架構(gòu)、系統(tǒng)架構(gòu)當(dāng)中。DDD最大的好處是統(tǒng)一交流語言,降低了溝通成本,但存在的難點是領(lǐng)域?qū)<疑腥?,它還是一個很新的概念,正在等待著更多最佳實踐~


熱門班型時間
人工智能就業(yè)班 即將爆滿
AI應(yīng)用線上班 即將爆滿
UI設(shè)計全能班 即將爆滿
數(shù)據(jù)分析綜合班 即將爆滿
軟件開發(fā)全能班 爆滿開班
網(wǎng)絡(luò)安全運營班 爆滿開班
報名優(yōu)惠
免費試聽
課程資料
官方微信
返回頂部
培訓(xùn)課程 熱門話題 站內(nèi)鏈接