[美] Eric Evans 著,趙俐,盛海艷,劉霞 譯
● “領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)之父”經(jīng)典著作
● 眾多聲名顯赫軟件大師鼎力推薦
● 凝聚領(lǐng)域建模專家數(shù)十年的實(shí)戰(zhàn)經(jīng)驗(yàn)
● 深度剖析構(gòu)建高質(zhì)量復(fù)雜系統(tǒng)的核心技術(shù)
領(lǐng)域模型使開(kāi)發(fā)人員可以表達(dá)豐富的軟件功能需求,由此實(shí)現(xiàn)的軟件可以滿足用戶真正的需要,因此被公認(rèn)為是軟件設(shè)計(jì)的關(guān)鍵所在,其重要性顯而易見(jiàn)。但講述如何將領(lǐng)域模型用于軟件開(kāi)發(fā)過(guò)程的杰出的實(shí)用資料卻不多見(jiàn)。本書(shū)正是這一領(lǐng)域聲名顯赫的作品,受到眾多業(yè)界大師的贊美和推介,廣受讀者好評(píng)。
要通過(guò)創(chuàng)建領(lǐng)域模型來(lái)加速?gòu)?fù)雜的軟件開(kāi)發(fā),就需要利用大量實(shí)踐和標(biāo)準(zhǔn)模式在開(kāi)發(fā)團(tuán)隊(duì)中形成統(tǒng)一的交流語(yǔ)言;不但要重構(gòu)代碼,而且要重構(gòu)代碼底層的模型;同時(shí)采取反復(fù)迭代的敏捷開(kāi)發(fā)方法,深入理解領(lǐng)域特點(diǎn),促進(jìn)領(lǐng)域?qū)<遗c程序員的良好溝通。針對(duì)這些內(nèi)容,本書(shū)結(jié)合真實(shí)項(xiàng)目,系統(tǒng)地介紹了領(lǐng)域驅(qū)動(dòng)開(kāi)發(fā)的目標(biāo)、意義和方法,充分討論了復(fù)雜系統(tǒng)的建模與設(shè)計(jì)問(wèn)題。
本書(shū)將指導(dǎo)面向?qū)ο箝_(kāi)發(fā)人員、系統(tǒng)分析人員和設(shè)計(jì)人員合理地組織工作,各有側(cè)重、彼此協(xié)作,有條不紊地進(jìn)行復(fù)雜系統(tǒng)的開(kāi)發(fā),幫助他們建立豐富而實(shí)用的領(lǐng)域模型,并由此創(chuàng)建長(zhǎng)期適用的優(yōu)質(zhì)軟件。
本書(shū)是領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)方面的經(jīng)典之作,修訂版更是對(duì)之前出版的中文版進(jìn)行了全面的修訂和完善。
全書(shū)圍繞著設(shè)計(jì)和開(kāi)發(fā)實(shí)踐,結(jié)合若干真實(shí)的項(xiàng)目案例,向讀者闡述如何在真實(shí)的軟件開(kāi)發(fā)中應(yīng)用領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)。書(shū)中給出了領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)的系統(tǒng)化方法,并將人們普遍接受的一些實(shí)踐綜合到一起,融入了作者的見(jiàn)解和經(jīng)驗(yàn),展現(xiàn)了一些可擴(kuò)展的設(shè)計(jì)新實(shí)踐、已驗(yàn)證過(guò)的技術(shù)以及便于應(yīng)對(duì)復(fù)雜領(lǐng)域的軟件項(xiàng)目開(kāi)發(fā)的基本原則。
Eric Evans “領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)之父”,世界杰出軟件建模專家。他創(chuàng)建了Domain Language公司,致力于幫助公司機(jī)構(gòu)創(chuàng)建與業(yè)務(wù)緊密相關(guān)的軟件。他在世界各地宣講領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)(Domain-Driven Design,DDD)的思想,開(kāi)設(shè)課程,參加會(huì)議,接受專訪,擁有大批的追隨者。從20世紀(jì)80年代開(kāi)始,他就以設(shè)計(jì)師和程序員的雙重身份參與過(guò)許多大型面向?qū)ο笙到y(tǒng)的設(shè)計(jì)和開(kāi)發(fā),涉及各種復(fù)雜的業(yè)務(wù)和技術(shù)領(lǐng)域。同時(shí),他還培訓(xùn)和指導(dǎo)過(guò)許多開(kāi)發(fā)團(tuán)隊(duì)開(kāi)展極限編程實(shí)踐。
“這本書(shū)應(yīng)該出現(xiàn)在每位軟件開(kāi)發(fā)人員的書(shū)架上?!?/p>
——Kent Beck,軟件開(kāi)發(fā)方法學(xué)泰斗,極限編程的創(chuàng)始人
“Eric的這本書(shū)太棒、太神奇了,他準(zhǔn)確地告訴你如何讓軟件設(shè)計(jì)滿足你的模型需求……本書(shū)讀起來(lái)趣味無(wú)窮。Eric有許多有趣的故事,而且描述起來(lái)很有一套……它將成為軟件開(kāi)發(fā)人員必讀的經(jīng)典之作。”
——Ralph Johnson,《設(shè)計(jì)模式》的作者
“如果你認(rèn)為自己在面向?qū)ο缶幊讨械耐度霙](méi)有收到回報(bào),讀了這本書(shū)你就會(huì)知道自己漏掉了什么?!?/p>
——Ward Cunningham,設(shè)計(jì)模式和敏捷軟件方法的先驅(qū)
“Eric Evans力證作為開(kāi)發(fā)核心的領(lǐng)域模型的重要性。他搭建了一個(gè)穩(wěn)固的框架,并提供了一套實(shí)現(xiàn)技術(shù)和技巧。這里沉淀下來(lái)的是亙古不變的智慧,在流行的方法論都淪為明日黃花后,它依然光華璀璨。”
——Dave Collins,Designing Object-Oriented User Interfaces的作者
“Eric完全從實(shí)戰(zhàn)者的角度著筆,描述了通用的語(yǔ)言、與用戶共享模型的好處、對(duì)象生命周期的管理、深度重構(gòu)的過(guò)程和結(jié)果,這是對(duì)我們這個(gè)領(lǐng)域的巨大貢獻(xiàn)?!?/p>
——Luke Hohmann,Beyond Software Architecture的作者
第一部分 運(yùn)用領(lǐng)域模型
第1章 消化知識(shí)
1.1 有效建模的要素
1.2 知識(shí)消化
1.3 持續(xù)學(xué)習(xí)
1.4 知識(shí)豐富的設(shè)計(jì)
1.5 深層模型
第2章 交流與語(yǔ)言的使用
2.1 模式:UBIQUITOUS LANGUAGE
2.2 “大聲地”建模
2.3 一個(gè)團(tuán)隊(duì),一種語(yǔ)言
2.4 文檔和圖
2.4.1 書(shū)面設(shè)計(jì)文檔
2.4.2 依賴可執(zhí)行代碼的情況
2.5 解釋性模型
第3章 綁定模型和實(shí)現(xiàn)
3.1 模式:MODEL-DRIVEN DESIGN
3.2 建模范式和工具支持
3.3 揭示主旨:為什么模型對(duì)用戶至關(guān)重要
3.4 模式:HANDS-ON MODELER
第二部分 模型驅(qū)動(dòng)設(shè)計(jì)的構(gòu)造塊
第4章 分離領(lǐng)域
4.1 模式:LAYERED ARCHITECTURE
4.1.1 將各層關(guān)聯(lián)起來(lái)
4.1.2 架構(gòu)框架
4.2 領(lǐng)域?qū)邮悄P偷木?br>4.3 模式:THE SMART UI“反模式”
4.4 其他分離方式
第5章 軟件中所表示的模型
5.1 關(guān)聯(lián)
5.2 模式:ENTITY(又稱為REFERENCE OBJECT)
5.2.1 ENTITY建模
5.2.2 設(shè)計(jì)標(biāo)識(shí)操作
5.3 模式:VALUE OBJECT
5.3.1 設(shè)計(jì)VALUE OBJECT
5.3.2 設(shè)計(jì)包含VALUE OBJECT的關(guān)聯(lián)
5.4 模式:SERVICE
5.4.1 SERVICE與孤立的領(lǐng)域?qū)?br>5.4.2 粒度
5.4.3 對(duì)SERVICE的訪問(wèn)
5.5 模式:MODULE(也稱為PACKAGE)
5.5.1 敏捷的MODULE
5.5.2 通過(guò)基礎(chǔ)設(shè)施打包時(shí)存在的隱患
5.6 建模范式
5.6.1 對(duì)象范式流行的原因
5.6.2 對(duì)象世界中的非對(duì)象
5.6.3 在混合范式中堅(jiān)持使用MODEL-DRIVEN DESIGN
第6章 領(lǐng)域?qū)ο蟮纳芷?br>6.1 模式:AGGREGATE
6.2 模式:FACTORY
6.2.1 選擇FACTORY及其應(yīng)用位置
6.2.2 有些情況下只需使用構(gòu)造函數(shù)
6.2.3 接口的設(shè)計(jì)
6.2.4 固定規(guī)則的相關(guān)邏輯應(yīng)放置在哪里
6.2.5 ENTITY FACTORY與VALUE OBJECT FACTORY
6.2.6 重建已存儲(chǔ)的對(duì)象
6.3 模式:REPOSITORY
6.3.1 REPOSITORY的查詢
6.3.2 客戶代碼可以忽略REPOSITORY的實(shí)現(xiàn),但開(kāi)發(fā)人員不能忽略
6.3.3 REPOSITORY的實(shí)現(xiàn)
6.3.4 在框架內(nèi)工作
6.3.5 REPOSITORY與FACTORY的關(guān)系
6.4 為關(guān)系數(shù)據(jù)庫(kù)設(shè)計(jì)對(duì)象
第7章 使用語(yǔ)言:一個(gè)擴(kuò)展的示例
7.1 貨物運(yùn)輸系統(tǒng)簡(jiǎn)介
7.2 隔離領(lǐng)域:引入應(yīng)用層
7.3 將ENTITY和VALUE OBJECT區(qū)別開(kāi)
7.4 設(shè)計(jì)運(yùn)輸領(lǐng)域中的關(guān)聯(lián)
7.5 AGGREGATE邊界
7.6 選擇REPOSITORY
7.7 場(chǎng)景走查
7.7.1 應(yīng)用程序特性舉例:更改Cargo的目的地
7.7.2 應(yīng)用程序特性舉例:重復(fù)業(yè)務(wù)
7.8 對(duì)象的創(chuàng)建
7.8.1 Cargo的FACTORY和構(gòu)造函數(shù)
7.8.2 添加Handling Event
7.9 停一下,重構(gòu):Cargo AGGREGATE 的另一種設(shè)計(jì)
7.10 運(yùn)輸模型中的MODULE
7.11 引入新特性:配額檢查
7.11.1 連接兩個(gè)系統(tǒng)
7.11.2 進(jìn)一步完善模型:劃分業(yè)務(wù)
7.11.3 性能優(yōu)化
7.12 小結(jié)
第三部分 通過(guò)重構(gòu)來(lái)加深理解
第8章 突破
8.1 一個(gè)關(guān)于突破的故事
8.1.1 華而不實(shí)的模型
8.1.2 突破
8.1.3 深層模型
8.1.4 冷靜決策
8.1.5 成果
8.2 機(jī)遇
8.3 關(guān)注根本
8.4 后記:越來(lái)越多的新理解
第9章 將隱式概念轉(zhuǎn)變?yōu)轱@式概念
9.1 概念挖掘
9.1.1 傾聽(tīng)語(yǔ)言
9.1.2 檢查不足之處
9.1.3 思考矛盾之處
9.1.4 查閱書(shū)籍
9.1.5 嘗試,再嘗試
9.2 如何為那些不太明顯的概念建模
9.2.1 顯式的約束
9.2.2 將過(guò)程建模為領(lǐng)域?qū)ο?br>9.2.3 模式:SPECIFICATION
9.2.4 SPECIFICATION的應(yīng)用和實(shí)現(xiàn)
第10章 柔性設(shè)計(jì)
10.1 模式:INTENTION-REVEALING INTERFACES
10.2 模式:SIDE-EFFECT-FREE FUNCTION
10.3 模式:ASSERTION
10.4 模式:CONCEPTUAL CONTOUR
10.5 模式:STANDALONE CLASS
10.6 模式:CLOSURE OF OPERATION
10.7 聲明式設(shè)計(jì)
10.8 聲明式設(shè)計(jì)風(fēng)格
10.9 切入問(wèn)題的角度
10.9.1 分割子領(lǐng)域
10.9.2 盡可能利用已有的形式
第11章 應(yīng)用分析模式
第12章 將設(shè)計(jì)模式應(yīng)用于模型
12.1 模式:STRATEGY(也稱為POLICY)
12.2 模式:COMPOSITE
12.3 為什么沒(méi)有介紹FLYWEIGHT
第13章 通過(guò)重構(gòu)得到深層的理解
13.1 開(kāi)始重構(gòu)
13.2 探索團(tuán)隊(duì)
13.3 借鑒先前的經(jīng)驗(yàn)
13.4 針對(duì)開(kāi)發(fā)人員的設(shè)計(jì)
13.5 重構(gòu)的時(shí)機(jī)
13.6 危機(jī)就是機(jī)遇
第四部分 戰(zhàn)略設(shè)計(jì)
第14章 保持模型的完整性
14.1 模式:BOUNDED CONTEXT
14.2 模式:CONTINUOUS INTEGRATION
14.3 模式:CONTEXT MAP
14.3.1 測(cè)試CONTEXT的邊界
14.3.2 CONTEXT MAP的組織和文檔化
14.4 BOUNDED CONTEXT之間的關(guān)系
14.5 模式:SHARED KERNEL
14.6 模式:CUSTOMER/SUPPLIER DEVELOPMENT TEAM
14.7 模式:CONFORMIST
14.8 模式:ANTICORRUPTION LAYER
14.8.1 設(shè)計(jì)ANTICORRUPTION LAYER的接口
14.8.2 實(shí)現(xiàn)ANTICORRUPTION LAYER
14.8.3 一個(gè)關(guān)于防御的故事
14.9 模式:SEPARATE WAY
14.10 模式:OPEN HOST SERVICE
14.11 模式:PUBLISHED LANGUAGE
14.12 “大象”的統(tǒng)一
14.13 選擇你的模型上下文策略
14.13.1 團(tuán)隊(duì)決策或*高層決策
14.13.2 置身上下文中
14.13.3 轉(zhuǎn)換邊界
14.13.4 接受那些我們無(wú)法*改的事物:描述外部系統(tǒng)
14.13.5 與外部系統(tǒng)的關(guān)系
14.13.6 設(shè)計(jì)中的系統(tǒng)
14.13.7 用不同模型滿足特殊需要
14.13.8 部署
14.13.9 權(quán)衡
14.13.10 當(dāng)項(xiàng)目正在進(jìn)行時(shí)
14.14 轉(zhuǎn)換
14.14.1 合并CONTEXT:SEPARATE WAY →SHARED KERNEL
14.14.2 合并CONTEXT:SHARED KERNEL→CONTINUOUS INTEGRATION
14.14.3 逐步淘汰遺留系統(tǒng)
14.14.4 OPEN HOST SERVICE→PUBLISHED LANGUAGE
第15章 精煉
15.1 模式:CORE DOMAIN
15.1.1 選擇核心
15.1.2 工作的分配
15.2 精煉的逐步提升
15.3 模式:GENERIC SUBDOMAIN
15.3.1 通用不等于可重用
15.3.2 項(xiàng)目風(fēng)險(xiǎn)管理
15.4 模式:DOMAIN VISION STATEMENT
15.5 模式:HIGHLIGHTED CORE
15.5.1 精煉文檔
15.5.2 標(biāo)明CORE
15.5.3 把精煉文檔作為過(guò)程工具
15.6 模式:COHESIVE MECHANISM
15.6.1 GENERIC SUBDOMAIN與COHESIVE MECHANISM的比較
15.6.2 MECHANISM是CORE DOMAIN一部分
15.7 通過(guò)精煉得到聲明式風(fēng)格
15.8 模式:SEGREGATED CORE
15.8.1 創(chuàng)建SEGREGATED CORE的代價(jià)
15.8.2 不斷發(fā)展演變的團(tuán)隊(duì)決策
15.9 模式:ABSTRACT CORE
15.10 深層模型精煉
15.11 選擇重構(gòu)目標(biāo)
第16章 大型結(jié)構(gòu)
16.1 模式:EVOLVING ORDER
16.2 模式:SYSTEM METAPHOR
16.3 模式:RESPONSIBILITY LAYER
16.4 模式:KNOWLEDGE LEVEL
16.5 模式:PLUGGABLE COMPONENT FRAMEWORK
16.6 結(jié)構(gòu)應(yīng)該有一種什么樣的約束
16.7 通過(guò)重構(gòu)得到適當(dāng)?shù)慕Y(jié)構(gòu)
16.7.1 小化
16.7.2 溝通和自律
16.7.3 通過(guò)重構(gòu)得到柔性設(shè)計(jì)
16.7.4 通過(guò)精煉可以減輕負(fù)擔(dān)
第17章 領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)的綜合運(yùn)用
17.1 把大型結(jié)構(gòu)與BOUNDED CONTEXT結(jié)合起來(lái)使用
17.2 將大型結(jié)構(gòu)與精煉結(jié)合起來(lái)使用
17.3 首先評(píng)估
17.4 由誰(shuí)制定策略
17.4.1 從應(yīng)用程序開(kāi)發(fā)自動(dòng)得出的結(jié)構(gòu)
17.4.2 以客戶為中心的架構(gòu)團(tuán)隊(duì)
17.5 制定戰(zhàn)略設(shè)計(jì)決策的6個(gè)要點(diǎn)
17.5.1 技術(shù)框架同樣如此
17.5.2 注意總體規(guī)劃
結(jié)束語(yǔ)
附錄
術(shù)語(yǔ)表
參考文獻(xiàn)
圖片說(shuō)明
索引
更多建議: