第1章 設計概論 1
1.1 麵嚮對象程序設計 1
1.1.1 麵嚮對象思想——任督二脈 1
1.1.2 麵嚮對象設計原則——九陽神功 2
1.1.3 模式——乾坤大挪移 3
1.1.4 重構——太極拳 4
1.1.5 抽象與組閤——獨孤九劍 5
1.2 麵嚮過程與麵嚮對象 5
1.3 設計的宏觀麵貌 8
1.3.1 開發模式:自頂嚮下和自底嚮上 8
1.3.2 開發方式:迭代 9
1.3.3 開發結果:模塊化 10
1.4 設計的微觀世界 10
1.4.1 函數 10
1.4.2 對象 12
1.5 小結 15
第2章 設計原則 16
2.1 通用原則 16
2.1.1 KISS原則 16
2.1.2 代碼之“形” 17
2.2 核心原則 20
2.2.1 單一職責原則(SRP):做一個專一的人 20
2.2.2 開放封閉原則(OCP):改造世界大部分不是破壞原來的秩序 21
2.2.3 裏氏替換原則(LSP):長大後,我就成瞭你 24
2.2.4 接口分離原則(ISP):不要一口吃成胖子 26
2.2.5 依賴倒置原則(DIP):抽象的藝術纔有生命力 27
2.3 擴展原則 28
2.3.1 迪米特法則:盡量不與無關的類發生關係 28
2.3.2 好萊塢法則:不要調用我,讓我調用你 29
2.3.3 優先使用組閤原則:多使用組閤,少使用繼承 31
2.4 小結 33
第3章 設計過程 34
3.1 設計目標 35
3.1.1 對象設計目標——“高內聚+低耦閤” 35
3.1.2 對象設計過程——“摺中+迭代+重構” 36
3.2 對象來源 38
3.3 對象創建 41
3.3.1 直接創建對象 41
3.3.2 間接創建對象 44
3.3.3 對象創建時機 51
3.4 對象管理 57
3.4.1 綫性結構——集閤對象 57
3.4.2 樹形組閤結構 65
3.5 對象交互 71
3.5.1 組閤——直接引用,互通有無 71
3.5.2 中介者——間接通信 74
3.5.3 事件——使用迴調函數通信 77
3.5.4 交互即耦閤 84
3.6 對象存儲 84
3.6.1 文件存儲 85
3.6.2 數據庫存儲 94
3.7 訪問控製 114
3.8 組織協作 132
3.8.1 代碼的組織方式——“同步+異步+多綫程” 132
3.8.2 業務的組織方式 138
3.9 對象布局 155
3.9.1 進入業務邏輯係統的第一道門檻——“Controller” 155
3.9.2 為什麼要分層——分層的意義 155
3.9.3 如何分層——價值導嚮 156
3.9.4 層的對接——模塊化與麵嚮接口編程 171
3.9.5 接口的轉換——適配器 172
3.9.6 接口的簡化——門麵 175
3.9.7 層的載體——包 179
3.9.8 分層的代價——效率和復雜性 180
3.9.9 層效率的有益補充 180
3.10 應對變化 183
3.10.1 變化的根源 184
3.10.2 變化的種類 184
3.10.3 處理變化的原則 186
3.10.4 應對變化的設計思路 189
3.11 小結 199
第4章 模式 200
4.1 模式定義 200
4.2 模式的意義 202
4.3 模式有缺點嗎 203
4.4 設計的四個階段 206
4.4.1 第一個階段:設計不足 207
4.4.2 第二個階段:模仿設計 208
4.4.3 第三個階段:過度設計 208
4.4.4 第四個階段:適度設計 213
4.5 反模式 214
4.5.1 開發流程反模式 214
4.5.2 數據庫設計反模式 215
4.5.3 密碼管理反模式 217
4.5.4 .NET開發反模式 217
4.6 小結 220
第5章 重構 221
5.1 重構動機 221
5.1.1 軟件代碼是會腐爛的 222
5.1.2 破窗效應 223
5.1.3 技術債務 224
5.2 重構的定義 224
5.3 重構難題 224
5.3.1 技術上的難題 225
5.3.2 管理上的難題 225
5.3.3 個人難題——程序員心理學 226
5.4 好代碼長什麼樣 226
5.5 重構技法 230
5.5.1 基本技法——重命名 235
5.5.2 第一種技法——轉移職責 237
5.5.3 第二種技法——封裝細節 243
5.5.4 第三種技法——抽象對象 254
5.6 重構實施 259
5.6.1 重構的實施方式 259
5.6.2 重構的質量 261
5.7 小結 266
第6章 迴到起點 267
6.1 忘掉模式 267
6.2 忘掉對象 269
6.3 迴到起點 276
6.3.1 設計原本 277
6.3.2 設計的靜態性 277
6.3.3 設計的動態性 289
後記 292
· · · · · · (
收起)