領域驅動設計參考
領域驅動設計是一種解決跨學科交流問題的軟體工程方法:由於開發人員和專業人員使用不同的術語,因此存在相互理解問題。
這首先是業務語言問題(不是程式語言),DDD通過為開發人員和專業人員提供一套用於理解的規則以及因此基礎領域的通用模型來幫助彌合這一障礙。
Eric Evans最初創造了DDD這個詞,他在這個站點 專門提供一個DDD參考PDF ,理解DDD的條目通常是困難的,因為DDD術語本身首先是難以理解和有點混亂的,補救的辦法是使用好的參考。 本欄目系列文章是對這個參考書的翻譯,以原文為準,僅僅供參考。
前言
自從我的書籍《領域驅動設計,解決軟體核心的複雜性》(或一些人稱之為“大藍皮書”)出版以來,已經有十多年了。在那十年裡,書中討論的基本原理並沒有改變太多,但是我們如何構建軟體卻發生了很大的變化。DDD一直保持著與現實的相關性,因為聰明和創新的人不斷地動搖過去的事情,我要感謝那些創新者。
讓我從Greg Young、Udi Dahan和他們所激勵的人們開始,首先是為CQR和EventSourcing,這些現在是DDD系統體系結構的主流選擇。這是從世紀之交繼承下來的狹隘架構觀的第一次成功的大轉變。
從那時起,已經有幾個有趣的技術和框架,它們的目標是使DDD在實現中更加具體(包括其設計人員的其他目標),並取得不同程度的成功。這些包括Qi4J, Naked Objects, Roo和其他。這些實驗即使沒有得到廣泛的應用,也有很大的價值。
我還要感謝近年來以使DDD更有趣和更實用的方式革命了我們的技術生態系統的人們和社群。這些人中的大多數對DDD的興趣微乎其微,但他們的工作使我們受益匪淺。我特別想到的是NoSQL給我們帶來的自由,新程式語言(某些函式)的語法噪音降低,以及對更輕的技術框架和非侵入性、分離的庫的不懈驅動。十年前的技術複雜而沉重,使得DDD更加困難。當然,也有不好的新技術,但趨勢是好的。所以我特別感謝所有促成這一趨勢的人,儘管你可能從未聽說過DDD。
接下來,我要感謝那些寫過DDD書籍的人。關於DDD的第一本書是吉米·尼爾森寫的。有了第一本書,你就又有了一本書,有了兩本書,你就有了一個話題。接下來,InfoQ很快釋出了DDD,由於它的簡潔性、作為免費下載的可用性以及InfoQ的廣泛性,這讓很多人第一次體驗到了這個主題。年復一年,有許多有價值的部落格文章和其他簡短的形式的作品。還有一些專門的書籍,如DDD和Naked Objects。我特別要感謝不可或缺的馬丁·福勒,他幫助清晰地傳達了DDD的概念,並經常提供新模式的權威文件。就在去年,沃恩·弗農出版了自我個人以來最雄心勃勃的一本書: "實現領域驅動的設計"(有些人似乎稱之為“大紅皮書”)。
我感到一種絕望,因為我不可避免地會遺漏許多做出重大貢獻的人,對此我深表歉意。我至少要對那些將DDD推向公眾視野的人和那些將DDD推向組織安靜角落的人,表示衷心的感謝。軟體哲學需要數千個擁護者才能產生任何影響。
雖然這是DDD參考的第一個印刷版,但最早的形式實際上早於我2004年出版的書。在拉爾夫·約翰遜的建議下,我提取了每種模式的簡要摘要,並在研討會上使用,每種模式都由與會者朗讀,然後進行討論。我在培訓班上用了這些檔案好幾年了。
然後,在我的書出版幾年後,沃德·坎寧安,作為他在模式儲存庫的工作的一部分,向一些作者建議,我們把模式的簡短摘要放入創造性的共享空間。馬丁·福勒和我,在我們出版商皮爾遜教育公司的同意下,就這樣做了,這為衍生作品打開了可能,比如這本書。
Thank you all.
Eric Evans, June 2014
定義概括
領域Domain :
知識、影響或活動的範圍,使用者應用程式的主題區域(業務區域)是軟體的領域。
模型model:
描述一個領域的特定方面的抽象系統,可以用來解決與該域相關的問題。
無處不在的語言ubiquitous language:
一種圍繞領域模型構建的語言,由所有團隊成員在有界的上下文中使用,以將團隊的所有活動與軟體連線起來。
語境上下文context:
一個詞或語句出現在某種環境背景中,而這個背景決定了其含義(語義,同一個詞語用在不同上下文意思就不同,雙關語等由此而來。)。有關模型的表達只能在一個上下文中理解。
有界上下文bounded context:
定義和適用特定模型的邊界描述(通常是子系統或某個團隊的工作專案)。