作品介紹

代碼整潔之道


作者:[美]RobertC.Martin     整理日期:2016-12-27 12:53:32


  軟件質量,不但依賴于架構及項目管理,而且與代碼質量緊密相關。這一點,無論是敏捷開發(fā)流派還是傳統(tǒng)開發(fā)流派,都不得不承認。
  本書提出一種觀念:代碼質量與其整潔度成正比。干凈的代碼,既在質量上較為可靠,也為后期維護、升級奠定了良好基礎。作為編程領域的佼佼者,本書作者給出了一系列行之有效的整潔代碼操作實踐。這些實踐在本書中體現(xiàn)為一條條規(guī)則(或稱“啟示”),并輔以來自現(xiàn)實項目的正、反兩面的范例。只要遵循這些規(guī)則,就能編寫出干凈的代碼,從而有效提升代碼質量。
  本書閱讀對象為一切有志于改善代碼質量的程序員及技術經(jīng)理。書中介紹的規(guī)則均來自作者多年的實踐經(jīng)驗,涵蓋從命名到重構的多個編程方面,雖為一“家”之言,然誠有可資借鑒的價值。

作者簡介
  Rober C.Martin,Object Mentor公司總裁。面向對象設計、模式、UML、敏捷方法學和極限編程領域的資深顧問。他是Designing Object-Oriented C++Applications Using the BoochMethod以及Jolt獲獎圖書Agile SoftwareDevelopment,Principles,Pattems,and Practices(中譯版《敏捷軟件開發(fā):原則、模式與實踐》)等暢銷書作者。

目錄:
  第1章 整潔代碼 1
  1.1 要有代碼 2
  1.2 糟糕的代碼 2
  1.3 混亂的代價 3
  1.3.1 華麗新設計 4
  1.3.2 態(tài)度 4
  1.3.3 迷題 5
  1.3.4 整潔代碼的藝術 5
  1.3.5 什么是整潔代碼 6
  1.4 思想流派 10
  1.5 我們是作者 11
  1.6 童子軍軍規(guī) 12
  1.7 前傳與原則 12
  1.8 小結 12
  1.9 文獻 13
  第2章 有意義的命名 15
  2.1 介紹 15
  2.2 名副其實 16
  2.3 避免誤導 17
  2.4 做有意義的區(qū)分 18
  2.5 使用讀得出來的名稱 19
  2.6 使用可搜索的名稱 20
  2.7 避免使用編碼 21
  2.7.1 匈牙利語標記法 21
  2.7.2 成員前綴 21
  2.7.3 接口和實現(xiàn) 22
  2.8 避免思維映射 22
  2.9  類名 23
  2.10 方法名 23
  2.11 別扮可愛 23
  2.12 每個概念對應一個詞 24
  2.13 別用雙關語 24
  2.14 使用解決方案領域名稱 25
  2.15 使用源自所涉問題領域的名稱 25
  2.16 添加有意義的語境 25
  2.17 不要添加沒用的語境 27
  2.18 最后的話 27
  第3章 函數(shù) 29
  3.1 短小 32
  3.2 只做一件事 33
  3.3 每個函數(shù)一個抽象層級 34
  3.4 switch語句 35
  3.5 使用描述性的名稱 36
  3.6 函數(shù)參數(shù) 37
  3.6.1 一元函數(shù)的普遍形式 38
  3.6.2 標識參數(shù) 38
  3.6.3 二元函數(shù) 38
  3.6.4 三元函數(shù) 39
  3.6.5 參數(shù)對象 39
  3.6.6 參數(shù)列表 40
  3.6.7 動詞與關鍵字 40
  3.7 無副作用 40
  3.8 分隔指令與詢問 42
  3.9 使用異常替代返回錯誤碼 42
  3.9.1 抽離Try/Catch代碼塊 43
  3.9.2 錯誤處理就是一件事 44
  3.9.3 Error.java依賴磁鐵 44
  3.10 別重復自己 44
  3.11 結構化編程 45
  3.12 如何寫出這樣的函數(shù) 45
  3.13 小結 45
  3.14 SetupTeardownIncluder程序 46
  3.15 文獻 48
  第4章 注釋 49
  4.1 注釋不能美化糟糕的代碼 50
  4.2 用代碼來闡述 51
  4.3 好注釋 51
  4.3.1 法律信息 51
  4.3.2 提供信息的注釋 51
  4.3.3 對意圖的解釋 52
  4.3.4 闡釋 53
  4.3.5 警示 53
  4.3.6 TODO注釋 54
  4.3.7 放大 54
  4.3.8 公共API中的Javadoc 55
  4.4 壞注釋 55
  4.4.1 喃喃自語 55
  4.4.2 多余的注釋 56
  4.4.3 誤導性注釋 58
  4.4.4 循規(guī)式注釋 58
  4.4.5 日志式注釋 59
  4.4.6 廢話注釋 59
  4.4.7 可怕的廢話 61
  4.4.8 能用函數(shù)或變量時就別用注釋 62
  4.4.9 位置標記 62
  4.4.10 括號后面的注釋 62
  4.4.11 歸屬與署名 63
  4.4.12 注釋掉的代碼 63
  4.4.13 HTML注釋 64
  4.4.14 非本地信息 64
  4.4.15 信息過多 65
  4.4.16 不明顯的聯(lián)系 65
  4.4.17 函數(shù)頭 66
  4.4.18 非公共代碼中的Javadoc 66
  4.4.19 范例 66
  4.5 文獻 69
  第5章 格式 71
  5.1 格式的目的 72
  5.2 垂直格式 72
  5.2.1 向報紙學習 73
  5.2.2 概念間垂直方向上的區(qū)隔 73
  5.2.3 垂直方向上的靠近 74
  5.2.4 垂直距離 75
  5.2.5 垂直順序 79
  5.3 橫向格式 79
  5.3.1 水平方向上的區(qū)隔與靠近 80
  5.3.2 水平對齊 81
  5.3.3 縮進 82
  5.3.4 空范圍 84
  5.4 團隊規(guī)則 84
  5.5 鮑勃大叔的格式規(guī)則 85
  第6章 對象和數(shù)據(jù)結構 87
  6.1 數(shù)據(jù)抽象 87
  6.2 數(shù)據(jù)、對象的反對稱性 89
  6.3 得墨忒耳律 91
  6.3.1 火車失事 91
  6.3.2 混雜 92
  6.3.3 隱藏結構 92
  6.4 數(shù)據(jù)傳送對象 93
  6.5 小結 94
  6.6 文獻 94
  第7章 錯誤處理 95
  7.1 使用異常而非返回碼 96
  7.2 先寫Try-Catch-Finally語句 97
  7.3 使用不可控異!98
  7.4 給出異常發(fā)生的環(huán)境說明 99
  7.5 依調用者需要定義異常類 99
  7.6 定義常規(guī)流程 100
  7.7 別返回null值 101
  7.8 別傳遞null值 102
  7.9 小結 103
  7.10 文獻 104
  第8章 邊界 105
  8.1 使用第三方代碼 106
  8.2 瀏覽和學習邊界 107
  8.3 學習log4j 108
  8.4 學習性測試的好處不只是免費 110
  8.5 使用尚不存在的代碼 110
  8.6 整潔的邊界 111
  8.7 文獻 112
  第9章 單元測試 113
  9.1 TDD三定律 114
  9.2 保持測試整潔 115
  9.3 整潔的測試 116
  9.3.1 面向特定領域的測試語言 118
  9.3.2 雙重標準 119
  9.4 每個測試一個斷言 121
  9.5 F.I.R.S.T. 122
  9.6 小結 123
  9.7 文獻 124
  第10章 類 125
  10.1 類的組織 126
  10.2 類應該短小 126
  10.2.1 單一權責原則 128
  10.2.2 內聚 129
  10.2.3 保持內聚性就會得到許多短小的類 130
  10.3 為了修改而組織 136
  10.4 文獻 139
  第11章 系統(tǒng) 141
  11.1 如何建造一個城市 142
  11.2 將系統(tǒng)的構造與使用分開 142
  11.2.1 分解main 143
  11.2.2 工廠 143
  11.2.3 依賴注入 144
  11.3 擴容 145
  11.4 Java代理 148
  11.5 純Java AOP框架 150
  11.6 AspectJ的方面 152
  11.7 測試驅動系統(tǒng)架構 153
  11.8 優(yōu)化決策 154
  11.9 明智使用添加了可論證價值的標準 154
  11.10 系統(tǒng)需要領域特定語言 154
  11.11 小結 155
  11.12 文獻 155
  第12章 迭進 157
  12.1 通過迭進設計達到整潔目的 157
  12.2 簡單設計規(guī)則1:運行所有測試 158
  12.3 簡單設計規(guī)則2~4:重構 158
  12.4 不可重復 159
  12.5 表達力 161
  12.6 盡可能少的類和方法 162
  12.7 小結 162
  12.8 文獻 162
  第13章 并發(fā)編程 163
  13.1 為什么要并發(fā) 164
  13.2 挑戰(zhàn) 165
  13.3 并發(fā)防御原則 166
  13.3.1 單一權責原則 166
  13.3.2 推論:限制數(shù)據(jù)作用域 166
  13.3.3 推論:使用數(shù)據(jù)復本 167
  13.3.4 推論:線程應盡可能地獨立 167
  13.4 了解Java庫 167
  13.5 了解執(zhí)行模型 168
  13.5.1 生產者-消費者模型 169
  13.5.2 讀者-作者模型 169
  13.5.3 宴席哲學家 169
  13.6 警惕同步方法之間的依賴 169
  13.7 保持同步區(qū)域微小 170
  13.8 很難編寫正確的關閉代碼 170
  13.9 測試線程代碼 171
  13.9.1 將偽失敗看作可能的線程問題 171
  13.9.2 先使非線程代碼可工作 171
  13.9.3 編寫可插拔的線程代碼 172
  13.9.4 編寫可調整的線程代碼 172
  13.9.5 運行多于處理器數(shù)量的線程 172
  13.9.6 在不同平臺上運行 172
  13.9.7 裝置試錯代碼 173
  13.9.8 硬編碼 173
  13.9.9 自動化 174
  13.10 小結 175
  13.11 文獻 175
  第14章 逐步改進 176
  14.1 Args的實現(xiàn) 177
  14.2 Args:草稿 183
  14.2.1 所以我暫停了 195
  14.2.2 漸進 195
  14.3 字符串參數(shù) 197
  14.4 小結 234
  第15章 JUnit內幕 235
  15.1 JUnit框架 236
  15.2 小結 249
  第16章 重構SerialDate 251
  16.1 首先,讓它能工作 252
  16.2 讓它做對 254
  16.3 小結 266
  16.4 文獻 267
  第17章 味道與啟發(fā) 269
  17.1 注釋 270
  17.2 環(huán)境 271
  17.3 函數(shù) 271
  17.4 一般性問題 272
  17.5 Java 288
  17.6 名稱 291
  17.7 測試 294
  17.8 小結 295
  17.9 文獻 296
  附錄A 并發(fā)編程II 297
  A.1 客戶端/服務器的例子 297
  A.1.1 服務器 297
  A.1.2 添加線程代碼 298
  A.1.3 觀察服務器端 299
  A.1.4 小結 301
  A.2 執(zhí)行的可能路徑 301
  A.2.1 路徑數(shù)量 302
  A.2.2 深入挖掘 303
  A.2.3 小結 305
  A.3 了解類庫 305
  A.3.1 Executor框架 305
  A.3.2 非鎖定的解決方案 306
  A.3.3 非線程安全類 307
  A.4 方法之間的依賴可能破壞并發(fā)代碼 308
  A.4.1 容忍錯誤 309
  A.4.2 基于客戶代碼的鎖定 309
  A.4.3 基于服務端的鎖定 311
  A.5 提升吞吐量 312
  A.5.1 單線程條件下的吞吐量 313
  A.5.2 多線程條件下的吞吐量 313
  A.6 死鎖 314
  A.6.1 互斥 315
  A.6.2 上鎖及等待 315
  A.6.3 無搶先機制 315
  A.6.4 循環(huán)等待 315
  A.6.5 不互斥 316
  A.6.6 不上鎖及等待 316
  A.6.7 滿足搶先機制 317
  A.6.8 不做循環(huán)等待 317
  A.7 測試多線程代碼 317
  A.8 測試線程代碼的工具支持 320
  A.9 小結 320
  A.10 教程:完整代碼范例 321
  A.10.1 客戶端/服務器非線程代碼 321
  A.10.2 使用線程的客戶端/服務器代碼 324
  附錄B org.jfree.date.SerialDate 327
  結束語 389





上一本:算法引論 下一本:路易·波拿巴的霧月十八日

作家文集

下載說明
代碼整潔之道的作者是[美]RobertC.Martin,全書語言優(yōu)美,行文流暢,內容豐富生動引人入勝。為表示對作者的支持,建議在閱讀電子書的同時,購買紙質書。

更多好書