什么是領域驅動設計
領域驅動設計(DDD):DDD的全稱為Domain-driven Design,是一套綜合軟件系統分析和設計的面向對象建模方法,是針對復雜系統設計的一套軟件工程方法,是一種思想。
什么是領域:領域是問題域 + 業務期望
一:問題域:領域中有許多的問題域,領域是有邊界的,要注重核心要解決的問題,問題域建模的過程就是業務領域分析的過程
二:業務期望:確定業務的期望與願景,業務的范圍,識別出業務需求的價值,識別出最核心的業務
什么是驅動:
一:領域驅動領域模型設計,需求分析 =>領域模型 ,領域模型驅動代碼實現,領域模型 =>代碼實現 ,分析領域中的核心問題(核心關注點),然后設計對應的領域模型,再通過領域模型驅動代碼實現。
什么是設計:
一:DDD中的設計主要指領域模型的設計,DDD是一種基於模型驅動開發的軟件開發思想,強調領域模型是整個系統的核心,領域模型也是整個系統的核心價值所在
為什么要使用領域驅動設計
一:不同於傳統以數據表為中心的建模方式,它以業務領域為中心來建模,迭代過程中,不斷重構完善設計,更好的面對業務的挑戰與變化
二:領域驅動設計是一套完整而系統的設計方法,它能帶給你從戰略設計到戰術設計的規范過程,使得你的設計思路能夠更加清晰,設計過程更加規范
三:是一種基於模型驅動的軟件設計方式。它以領域為核心,分析領域中的問題,通過建立一個領域模型來有效的解決領域中的核心的復雜問題,模型反映業務,識別業務的邊界,價值,控制業務的復雜度,業務越復雜的場景使用DDD,價值越大
四:對提高軟件的可維護性,業務可理解性以及可重用性方面都有很好的幫助,可以提高團隊成員的面向對象設計能力與架構設計能力,提高溝通協作能力
五:領域模型貫穿軟件分析、設計,以及開發的整個過程;領域專家、設計人員、開發人員通過領域模型進行交流,彼此共享知識與信息,防止需求走樣
六:領域模型是整個軟件的核心,是軟件中最有價值和最具競爭力的部分,設計足夠精良且符合業務需求的領域模型能夠更快速的響應需求變化
七:一種開發思想的轉變,讓開發人員不止關注技術領域,還要關注業務領域,團隊協作溝通
通用語言
在開發的過程中領域專家、設計人員、開發人員需要一起交流溝通,來了解業務分析需求,建立領域模型,由於我們每個人掌握的領域知識不一樣,思考的方式不一樣,每個人都有自己的看法,不建立通用的語言,很難溝通,達成共識,會造成像盲人摸象一樣,加大溝通的成本,業務也會有偏差,建立通用語言,基於通用語言交流溝通,讓團隊人員達成共識,提升溝通的效率
一:發現領域內的概念,術語,形成術語表,給出英文術語,專有概念(專門為軟件開發而提煉出的概念)基於統一語言進行交流,溝通
二:領域驅動設計的一個核心的原則是使用一種基於模型的語言,通用語言反應業務的概念與行為
三:基於統一語言溝通交流,必須保證術語概念的一致性,及時更新維護,達成共識,減少溝通的成本
四:領域行為是對業務過程的描述,基於領域術語描述業務場景用例,它體現了更加完整的業務需求以及復雜的業務規則
五:在同一個限界上下文中必須保證統一語言的唯一性
六:獲得統一語言就是需求分析的過程,也是團隊中各個角色就系統目標、范圍與具體功能達成一致的過程
七:實現代碼時,項目的類名,方法名,倉儲,界限上下文,接口等,都應該使用通用語言的英文術語來命名
資料的來源
想要從頭開始學習DDD,DDD中有許多難懂的概念,只看博客,視頻,很難理解,至少我覺得有難度,在實際開發中去理解,這樣會事半功倍,收集資料,先了解DDD的基礎知識,慢慢的學會自己思考,我希望自己能堅持下去。
感謝前輩們的付出,才讓我們學習起來更容易一點,謝謝!
湯總netfocus的DDD系列的博客,非常的全面透徹,學習DDD必讀: https://www.cnblogs.com/netfocus/category/361987.html
dax.net:https://sunnycoding.cn/
張逸老師:GitChat 領域驅動設計實戰書籍
解道JDON:https://www.jdon.com/ddd.html
田園的蟋蟀:https://www.cnblogs.com/xishuai/category/572887.html