DDD专家张逸:构建领域驱动设计知识体系
張逸
讀完需要
5
分鐘速讀僅需 2 分鐘
領(lǐng)域驅(qū)動設(shè)計專家,曾就職于 ThoughtWorks,作為 Lead Consultant 為客戶提供架構(gòu)設(shè)計、大數(shù)據(jù)分析、持續(xù)交付、代碼質(zhì)量、敏捷管理等咨詢服務(wù)。著譯作包括《軟件設(shè)計精要與模式》、《WCF 服務(wù)編程》、《Java 設(shè)計模式》、《恰如其分的軟件架構(gòu)》、《人件》等。新書《解構(gòu)領(lǐng)域驅(qū)動設(shè)計》即將完稿。
本次演講是張逸老師創(chuàng)作 GitChat 課程「領(lǐng)域驅(qū)動戰(zhàn)略設(shè)計實踐」和「領(lǐng)域驅(qū)動戰(zhàn)術(shù)設(shè)計實踐」這兩年來,隨著對領(lǐng)域驅(qū)動設(shè)計的深度理解,結(jié)合自身項目經(jīng)驗總結(jié)的領(lǐng)域驅(qū)動設(shè)計知識體系。
本次演講內(nèi)容分為四個部分:
領(lǐng)域驅(qū)動設(shè)計的歷史回顧
對領(lǐng)域驅(qū)動設(shè)計的新定位
領(lǐng)域驅(qū)動設(shè)計參考過程模型
領(lǐng)域驅(qū)動設(shè)計能力評估模型
1
? ?
領(lǐng)域驅(qū)動設(shè)計的歷史回顧
從 2004 年 Eric Evans 的經(jīng)典著作《領(lǐng)域驅(qū)動設(shè)計》出版開始,在這十五年間,我個人認(rèn)為有四個重要的里程碑值得重視。
里程碑之一:領(lǐng)域驅(qū)動設(shè)計的誕生
里程碑之二:領(lǐng)域事件的引入
它的重要意義在于拓寬了領(lǐng)域驅(qū)動設(shè)計的建模范式,引入了以“事件”和“函數(shù)”為核心的新的領(lǐng)域驅(qū)動設(shè)計模式,如 Event Store、Event Sourcing、Pure Function 等:
架構(gòu)模式也發(fā)生了變化:
里程碑之三:微服務(wù)的引入
毫無疑問,微服務(wù)概念以及該架構(gòu)模式的產(chǎn)生與發(fā)展,對領(lǐng)域驅(qū)動設(shè)計產(chǎn)生了深遠(yuǎn)的影響。它的引入對企業(yè)應(yīng)用系統(tǒng)的設(shè)計與開發(fā)帶來了各方面的影響。
首先是設(shè)計理念的改變。傳統(tǒng)的數(shù)據(jù)模型驅(qū)動設(shè)計并不適合微服務(wù)架構(gòu)。例如,那種以數(shù)據(jù)庫 SQL 或存儲過程操作數(shù)據(jù)的方式,在微服務(wù)架構(gòu)下已經(jīng)不具備優(yōu)勢:
其次,領(lǐng)域驅(qū)動設(shè)計引入的限界上下文邊界與聚合邊界更適合微服務(wù)架構(gòu):
通過防腐層(ACL)與開放主機服務(wù)(OHS)維護好限界上下文的邊界,有利于單體架構(gòu)向微服務(wù)架構(gòu)的遷移:
領(lǐng)域驅(qū)動設(shè)計強調(diào)領(lǐng)域模型與數(shù)據(jù)模型的分離,在從單庫單表的數(shù)據(jù)結(jié)構(gòu)遷移到多庫多表時,領(lǐng)域模型受到的影響較小,同樣有利于單體架構(gòu)到微服務(wù)架構(gòu)的遷移。
在 2017 年的 DDD 中國峰會,我對肖然笑稱是“微服務(wù)拯救了領(lǐng)域驅(qū)動設(shè)計”,但這個說法其實比較過分,因為領(lǐng)域驅(qū)動設(shè)計并沒有岌岌可危,只是并未成為國內(nèi)軟件開發(fā)的主流而已,因而我改為一個更加溫柔的說法:微服務(wù)讓領(lǐng)域驅(qū)動設(shè)計煥發(fā)了青春。
但是,到了 2019 年的今天,我卻要改變這一說法:不是微服務(wù)讓領(lǐng)域驅(qū)動設(shè)計煥發(fā)青春,而是微服務(wù)“愛上了”領(lǐng)域驅(qū)動設(shè)計,二者其實是天作之合。
里程碑之四:中臺戰(zhàn)略的引入
ThoughtWorks 的王健將微服務(wù)定義為:企業(yè)級能力復(fù)用平臺。我很認(rèn)同這一定義,如果仔細(xì)分析這九個字的定義,也可以從領(lǐng)域驅(qū)動設(shè)計中找到映射。
首先,領(lǐng)域驅(qū)動設(shè)計中問題空間的子領(lǐng)域和解決方案空間的限界上下文就體現(xiàn)了企業(yè)級能力:
其次,領(lǐng)域驅(qū)動設(shè)計強調(diào)將領(lǐng)域?qū)营毩⒊鰜?#xff0c;即可形成對領(lǐng)域模型的復(fù)用:
領(lǐng)域驅(qū)動設(shè)計的四重邊界與整潔架構(gòu)思想的遵循,可以幫助我們更好地完成平臺的沉淀:
中臺戰(zhàn)略(Zhongtai Strategy)是否能夠更好地與領(lǐng)域驅(qū)動設(shè)計結(jié)合,或許答案還未可知,但我們可以對其進行探索。
2
? ?
對領(lǐng)域驅(qū)動設(shè)計的新定位
我認(rèn)為領(lǐng)域驅(qū)動設(shè)計從最初的一種技術(shù)體系,到現(xiàn)在已經(jīng)發(fā)展成了一種設(shè)計哲學(xué):
為此,我建立了領(lǐng)域驅(qū)動設(shè)計魔方,分別從 X、Y、Z 三個維度對領(lǐng)域驅(qū)動設(shè)計進行了梳理:
我基于 Y 軸劃分的宏觀層次、微觀層次與納米層次分別介紹了領(lǐng)域驅(qū)動設(shè)計魔方:
在領(lǐng)域驅(qū)動設(shè)計魔方中,我引入了業(yè)務(wù)架構(gòu)、系統(tǒng)上下文、事件風(fēng)暴、整潔架構(gòu)、RAID 風(fēng)暴、RUP 4+1 視圖、康威定律、精益需求管理、敏捷過程管理、場景驅(qū)動設(shè)計、測試驅(qū)動開發(fā)和測試戰(zhàn)略。這些內(nèi)容在 PPT 中都有介紹,這里就不再贅述。
3
? ?
領(lǐng)域驅(qū)動設(shè)計參考過程模型
固化領(lǐng)域驅(qū)動設(shè)計的過程,提供簡單有效的實踐方法,建立具有目的性和可操作性的研發(fā)過程。
在全局分析階段,參考過程模型的實踐包括:
在戰(zhàn)略設(shè)計階段,參考過程模型的實踐包括:
如果當(dāng)前限界上下文屬于核心子領(lǐng)域,則應(yīng)該為該限界上下文開展領(lǐng)域模型驅(qū)動設(shè)計,這一階段的參考過程模型包括:
4
? ?
領(lǐng)域驅(qū)動設(shè)計能力評估模型
借助領(lǐng)域驅(qū)動設(shè)計魔方與領(lǐng)域驅(qū)動設(shè)計參考過程模型引入的各種方法與模式,我建立了一套領(lǐng)域驅(qū)動設(shè)計能力評估模型。
領(lǐng)域驅(qū)動設(shè)計能力評估模型(Domain-driven design Capability Assesment Model, DCAM)是我個人對領(lǐng)域驅(qū)動設(shè)計經(jīng)驗的一個提煉,可以通過它指導(dǎo)團隊進行能力的培養(yǎng)和提升。
DCAM 并非一個標(biāo)準(zhǔn)或一套認(rèn)證體系,更非事先制定和強制執(zhí)行的評估框架。建立這套模型的目的僅僅是為了更好地實施領(lǐng)域驅(qū)動設(shè)計,它是一個能夠不斷演化的評估框架。
該能力評估模型針對的能力維度包括:
敏捷迭代能力
領(lǐng)域建模能力
架構(gòu)設(shè)計能力
整潔編碼能力
敏捷迭代能力
領(lǐng)域建模能力
架構(gòu)設(shè)計能力
整潔代碼能力
領(lǐng)域驅(qū)動設(shè)計的落地取決于一個成熟的領(lǐng)域驅(qū)動設(shè)計團隊。利用 DCAM 對團隊進行評估,在發(fā)現(xiàn)團隊成員的能力短板后進行針對性的培訓(xùn),一旦提升了整個團隊的成熟度,在領(lǐng)域驅(qū)動設(shè)計的精髓指導(dǎo)下,距離領(lǐng)域驅(qū)動設(shè)計的成功就不遠(yuǎn)了!
- EOF -
微服務(wù)架構(gòu)~BFF和網(wǎng)關(guān)是如何演化出來的2020-10-06
這十年,阿里開發(fā)者畢玄的日常2020-10-05
天弘基金首席架構(gòu)師李鑫:微服務(wù)接口限流的算法及架構(gòu)實現(xiàn)2020-10-04
? ?END ? ?? #架構(gòu)師必備# 點分享點點贊點在看總結(jié)
以上是生活随笔為你收集整理的DDD专家张逸:构建领域驱动设计知识体系的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java版计算器
- 下一篇: java打地鼠游戏-有背景音乐有图