本書介紹了高效的軟件設(shè)計(jì)和編程方法,把精益需求分析、領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)、面向?qū)ο、契約式設(shè)計(jì)、測試驅(qū)動(dòng)開發(fā)、意圖導(dǎo)向編程及演進(jìn)式設(shè)計(jì)等編程實(shí)踐融會(huì)貫通,深入洞察軟件設(shè)計(jì)本質(zhì),展示了一個(gè)清晰的程序員編程能力提升路線圖。全書共十二章,按照程序員技能提升的順序,分為品味篇、專業(yè)篇和高效篇。 本書適合各種編程語言的一線開發(fā)者、大學(xué)計(jì)算機(jī)和軟件工程相關(guān)專業(yè)三年級以上本科生或研究生閱讀,也適合專業(yè)的軟件開發(fā)團(tuán)隊(duì)作為統(tǒng)一編程范式、提升設(shè)計(jì)意識(shí)和能力的參考書。
1.軟件設(shè)計(jì)的進(jìn)階指南
讀者可以按順序閱讀本書的各章節(jié)。也可以按照需要在各章節(jié)之間跳轉(zhuǎn)。由于每一位開發(fā)者或多或少地接觸過某些知識(shí)點(diǎn),所以本書的各章節(jié)盡量做到彼此獨(dú)立。此外,書末包含索引,在其中可以找到各主要概念在本書中出現(xiàn)的位置。
2.編程能力提升路線圖
本書被設(shè)計(jì)為一個(gè)“藏寶圖”。它提供一個(gè)路線圖,引導(dǎo)讀者找到所需的寶藏。在保證每個(gè)部分介紹的內(nèi)容是完整的基礎(chǔ)上,我刻意控制了每章的篇幅,把更具體的內(nèi)容和做法指引到該領(lǐng)域的參考文獻(xiàn)。讀者們可以通過參考文獻(xiàn)的線索以及自主的知識(shí)檢索,深入了解其中的關(guān)鍵實(shí)踐。
3.形成團(tuán)隊(duì)設(shè)計(jì)共識(shí)
軟件開發(fā)是集體活動(dòng),特別是考慮到演進(jìn)因素時(shí)更是如此。本書可以作為關(guān)心提升效率的研發(fā)團(tuán)隊(duì)集體學(xué)習(xí)和討論的素材,在本書介紹的實(shí)踐基礎(chǔ)上結(jié)合實(shí)際形成和加深共識(shí)。
張剛,軟件工程博士、資深技術(shù)專家、CCF 軟件工程委員會(huì)執(zhí)行委員、貝爾實(shí)驗(yàn)室杰出工程師。先后任職于阿爾卡特朗訊、上海理工大學(xué)和阿里巴巴。20 余年軟件開發(fā)、架構(gòu)設(shè)計(jì)和技術(shù)領(lǐng)導(dǎo)者的成功經(jīng)驗(yàn),先進(jìn)軟件工程方法與實(shí)踐的持續(xù)探索者和積極傳播者。
目錄
品味篇 識(shí)別優(yōu)秀設(shè)計(jì)
第 1章 優(yōu)質(zhì)代碼的外部特征 2
1.1 實(shí)現(xiàn)了期望的功能 2
1.2 缺陷盡量少 6
1.3 易于理解 8
1.4 易于演進(jìn) 11
1.5 易于復(fù)用 13
1.6 小結(jié) 14
第 2章 優(yōu)質(zhì)代碼的內(nèi)在特征 16
2.1 一致的編碼風(fēng)格 16
2.2 有意義的命名 19
2.3 簡潔的行為實(shí)現(xiàn) 24
2.4 高內(nèi)聚和低耦合的模塊化結(jié)構(gòu) 28
2.5 沒有重復(fù) 37
2.6 沒有多余的設(shè)計(jì) 42
2.7 具備自動(dòng)化測試 45
2.8 小結(jié) 47
第3章 高質(zhì)量的需求 52
3.1 用結(jié)構(gòu)化的方法分析需求 52
3.2 定義業(yè)務(wù)目標(biāo) 58
3.3 探索業(yè)務(wù)流程,定義系統(tǒng)功能 61
3.4 完善操作步驟,澄清業(yè)務(wù)規(guī)則 68
3.5 小結(jié) 77
第4章 領(lǐng)域建模 79
4.1 領(lǐng)域模型的概念 79
4.2 捕獲業(yè)務(wù)概念 85
4.3 辨析業(yè)務(wù)概念 85
4.4 持續(xù)演進(jìn)業(yè)務(wù)概念 91
4.5 用領(lǐng)域模型指導(dǎo)軟件開發(fā) 95
4.6 小結(jié) 97
專業(yè)篇 建立扎實(shí)功底
第5章 設(shè)計(jì)分解和責(zé)任分配 99
5.1 通過分而治之管理復(fù)雜性 99
5.2 架構(gòu)分解的原則與模式 105
5.3 正確使用語言特性 110
5.4 關(guān)注點(diǎn)分離 116
5.5 設(shè)計(jì)模式 119
5.6 小結(jié) 124
第6章 依賴、接口和契約 126
6.1 依賴的設(shè)計(jì)原則 126
6.2 需求方接口 134
6.3 提供方接口 142
6.4 設(shè)計(jì)契約 145
6.5 事件機(jī)制 151
6.6 小結(jié) 156
卓越篇 實(shí)現(xiàn)高效編碼
第7章 用測試描述需求和契約 160
7.1 將測試作為一個(gè)建設(shè)性活動(dòng) 160
7.2 從V 模型到I 模型 161
7.3 用測試澄清和文檔化需求 164
7.4 用測試澄清職責(zé)和契約 170
7.5 測試先行 174
7.6 小結(jié) 180
第8章 用領(lǐng)域模型指導(dǎo)實(shí)現(xiàn) 182
8.1 用領(lǐng)域模型指導(dǎo)實(shí)現(xiàn) 182
8.2 基本構(gòu)造塊 188
8.3 聚合、資源庫和工廠 196
8.4 分層架構(gòu)和代碼結(jié)構(gòu) 208
8.5 限界上下文 211
8.6 上下文映射 213
8.7 領(lǐng)域模型的持續(xù)演進(jìn) 217
8.8 小結(jié) 219
第9章 由外而內(nèi)的設(shè)計(jì) 221
9.1 如何由外而內(nèi) 221
9.2 由外而內(nèi)設(shè)計(jì)的優(yōu)勢 235
9.3 應(yīng)用測試替身 238
9.4 測試先行和由外而內(nèi) 247
9.5 把由外而內(nèi)應(yīng)用于大規(guī)模的項(xiàng)目 249
9.6 小結(jié) 261
第 10章 設(shè)計(jì)質(zhì)量貫穿始終 263
10.1 質(zhì)量內(nèi)建 263
10.2 契約式設(shè)計(jì)和防御式編程 265
10.3 高質(zhì)量的自動(dòng)化測試 273
10.4 代碼評審和結(jié)對編程 285
10.5 代碼質(zhì)量度量和問題檢測 288
10.6 小結(jié) 300
第 11章 讓設(shè)計(jì)持續(xù)演進(jìn) 302
11.1 軟件設(shè)計(jì)的演進(jìn)本質(zhì) 302
11.2 簡單設(shè)計(jì) 305
11.3 重構(gòu) 310
11.4 測試驅(qū)動(dòng)開發(fā) 318
11.5 持續(xù)集成 330
11.6 小結(jié) 332
第 12章 精益思想和高效編程 334
12.1 精益思想 334
12.2 精益思想和軟件設(shè)計(jì)的關(guān)系 337
12.3 總結(jié) 340
參考文獻(xiàn) 345
索引 349