Eric Evans的“Domain-Driven Design領(lǐng)域驅(qū)動設(shè)計”簡稱DDD,Evans DDD是一套綜合軟件系統(tǒng)分析和設(shè)計的面向?qū)ο蠼7椒ǎ菊綣don.com是國內(nèi)公開最早討論DDD網(wǎng)站之一,可訂閱DDD專題。
過去系統(tǒng)分析和系統(tǒng)設(shè)計都是分離的,這種割裂導致:對需求分析設(shè)計的結(jié)果無法直接落地為代碼,而能夠運行的代碼卻無法完整實現(xiàn)業(yè)務功能,同時,軟件Bug頻出,維護升級重寫難度大。
DDD則打破了這種隔閡,提出了領(lǐng)域模型概念,統(tǒng)一了分析和設(shè)計編程,使得軟件能夠更靈活快速跟隨需求變化。見下面DDD與傳統(tǒng)CRUD或過程腳本或者面向數(shù)據(jù)表等在開發(fā)效率上比較:
DDD革命性在于:領(lǐng)域模型準確反映了業(yè)務領(lǐng)域語言,領(lǐng)域語言是每個行業(yè)的行話,正如科學需要數(shù)學語言;算法需要編程語言;法律需要法律術(shù)語;繪畫音樂建筑等也有自己的藝術(shù)語言,專業(yè)領(lǐng)域都有領(lǐng)域語言。
DDD最大好處是:接觸到需求第一步是首先理解其領(lǐng)域語言,提煉出領(lǐng)域模型。DDD讓你首先考慮的是領(lǐng)域語言(在特定上下文中的含義),落地的代碼能直觀映射到領(lǐng)域模型。
DDD難點在于Bounded Context(BC:有界上下文/限界上下文),關(guān)鍵是在于"Context":
Context:Context is King已經(jīng)成為現(xiàn)代認知最基本的共識之一
Context在中文里或指: 上下文、語境、情況、環(huán)境、情境、場景、境地、范圍、階段、局限、背景、周期、順勢、作用域、范式、來龍去脈、路徑、道、假設(shè)、前提、預設(shè)、第一性原理、原因...
中文沒有專門Context單詞,導致人們忽視其通用廣泛存在;另外,認知缺乏邊界感也是阻礙之一。
識別上下文是界定問題在哪里,在界定的上下文邊界內(nèi)進行符號推理是解決問題。什么是Context上下文?
DDD是解決復雜中大型業(yè)務系統(tǒng)的一套行之有效方式,DDD認為很多原因都會造成軟件的復雜性,我們不可能避免所有復雜性,一個好的領(lǐng)域模型是控制復雜性的關(guān)鍵。領(lǐng)域模型的價值在于提供一種通用的語言,使得領(lǐng)域?qū)<摇a(chǎn)品經(jīng)理和軟件技術(shù)人員聯(lián)系在一起,溝通無歧義。
DDD 的優(yōu)勢:
對齊:正如橋梁連接兩邊一樣,領(lǐng)域設(shè)計驅(qū)動確保軟件開發(fā)與業(yè)務領(lǐng)域無縫連接。
靈活性:通過清晰的領(lǐng)域模型,設(shè)計驅(qū)動發(fā)展(DDD)提供了一個基礎(chǔ),可以更好地適應變化,與不斷發(fā)展的業(yè)務需求保持一致。
改進協(xié)作:通過建立共享語言,可確保開發(fā)人員和領(lǐng)域?qū)<抑g的清晰度和統(tǒng)一性。
DDD 有許多組成部分和概念,以下是其中的一些概念:
領(lǐng)域通用語言UL:領(lǐng)域本體語言,業(yè)務行話術(shù)語,自成邏輯體系的語系,UL是技術(shù)和業(yè)務溝通的橋梁。
BC有界上下文:受專業(yè)術(shù)語一致限制的形式邊界,術(shù)語內(nèi)容含義取決于其語境和上下文。
聚合體:領(lǐng)域模型(實體和價值對象)的對象群,作為一個單一的單元來處理和交易。
個人觀點:
事件=點、上下文=線、子域=面
線由點組成,建議從事件活動點開始,從下而上涌現(xiàn)中發(fā)現(xiàn)上下文。
子域的面由很多上下文的線組成。
由下而上設(shè)計流程:點->線->面;而不是由上而下設(shè)計:面->線->點
DDD建模是一個探索發(fā)現(xiàn)過程,無法從頂層設(shè)計開始
由上而下是一種科學還原論方法,認為事物由分子組成,分子由原子組成,只要找到所有原子就能組裝成任何一個物體,其實很多物體現(xiàn)象是由原子之間相互作用才有的涌現(xiàn)屬性,如果拆分成單個原子反而找不到這些屬性,1+1>2,大于2的屬性不屬于倆個1,而是兩個1組合在一起才有的。
事物由下而上涌現(xiàn)產(chǎn)生,如果你顛倒次序,由上而下學習復制,你以為這樣的復制還是原來的那個事物嗎?上下顛倒制造復制一個就是原來的那個嗎?這是在做模具嗎?不是,世界不是用機械模具復制出來的。
DDD落地架構(gòu)有:Clean架構(gòu)、六邊形架構(gòu)、 CQRS、Event Source幾大大相關(guān)領(lǐng)域。下圖是傳統(tǒng)以數(shù)據(jù)庫為中心的架構(gòu)與使用DDD實現(xiàn)以領(lǐng)域為中心架構(gòu)的區(qū)別。
服務器后端架構(gòu)發(fā)展兩個階段:
UI+Service+DataBase的多層SOA架構(gòu)(上圖左),這種服務+數(shù)據(jù)表模型的架構(gòu)易使服務變得囊腫,難于維護拓展,伸縮性能差,見這里討論或Spring Web 應用的最大敗筆
DDD+ 模塊化單體或微服務:DDD作為數(shù)據(jù)建模的升級,主要貢獻在于領(lǐng)域界線的劃分,界定界限以后,通過兩種架構(gòu)實現(xiàn)領(lǐng)域模型代表的業(yè)務功能:模塊化單體或微服務架構(gòu)。
DDD專門為解決復雜性而誕生,因此解決思路完全不同于傳統(tǒng)的CRUD,但是DDD本身掌握起來并不會感覺復雜,從程序員角度看,DDD其實是研究將包含業(yè)務邏輯的ifelse語句放在哪里的學問,包括業(yè)務流程、業(yè)務規(guī)則、規(guī)則引擎、術(shù)語字典、DSL或正則表達式、商業(yè)智能和數(shù)據(jù)分析等都屬于業(yè)務邏輯的范疇領(lǐng)域。
如需要深入了,可繼續(xù)閱讀此文:https://zhuanlan.zhihu.com/p/641295531
小叮當管理ERP在行業(yè)內(nèi)頂尖,實現(xiàn)各種數(shù)字化流程管理,獲得數(shù)萬家企業(yè)的認可。
裝飾行業(yè)管理與營銷服務方案提供商
裝飾行業(yè)管理與營銷服務方案提供商
注冊體驗賬號,享受體驗賬號和試用培訓。
小叮當致力于以 “快速增效” 的方式,讓每一位裝企用戶提高工作效率