程式要寫得好,不只是執行結果正確就好。
這些情況是否似曾相識?
.過個週末就看不懂自己寫了什麼 code
.修好一邊的 bug,另一邊就出新 bug
.稍微調整功能,就必須地毯式檢查整個專案
【寫程式別再靠直覺和乖乖!】
只要建立優良的程式結構,就算交給其他人接手,
也可以快速地理解、維護、修改原始碼。
本書所傳授的,就是寫出「好程式」的「設計技巧」。
◆辨識
- 資深軟體架構師的職場實際負面案例,親眼見證業界 bad code
- 低內聚、密耦合、半熟物件、退化註解……認識壞結構就能一眼看破
◆分析
- 防衛不足、功能分散、職責不清……分析主要弊病,對症下藥
- YAGNI、Tell, Don't Ask、單一責任、最小驚訝……認識設計原則,檢討程式碼
◆改善
- 防衛子句、值物件、工廠類別、策略模式……各種技巧範例實際解決問題
- 學習地圖、職場心法無私分享,軟體設計不再是紙上談兵
程式人人都能寫,好程式卻是寥若晨星;
掌握軟體設計力,才能創造工程師的專業價值 & 不可取代性!
本書特色:
◆293 個精心準備的程式範例
以電商系統與電玩遊戲為例,挑選主流語言共通語法,逐步示範將粗劣程式碼縫補、修整的過程。
◆詳細列舉優質、劣質程式碼的特徵與影響
基於資深職業經驗,具體說明,在現實程式碼也能活用書中技巧。
◆觀念基礎扎實,說明清晰易懂
以多種比喻、聯想來說明,而非通篇艱澀道理,可與生活經驗融會貫通。
◆旁徵博引,融合歷來軟體經典概念
引述軟體設計各大經典書籍,一本集結知識精華,也是銜接經典的橋樑。
作者簡介:
仙塲大也
出身於青森縣。曾任職知名電機製造商,目前在 READYFOR 擔任軟體架構師,致力於推廣重構與軟體設計。
在與劣質程式碼戰鬥的過程中發現了軟體設計的魅力。有空的時候就會在腦中重構程式碼。
曾獲 IT 工程書大賞 2023 技術書部門大賞、Developers Summit 2023 話題賞第 1 名、最佳講者賞第 3 名,多次受邀演講。
Twitter(現 X):ミノ駆動(@MinoDriven)
目錄
序言
第 1 章 瞭解不良構造的後果
1.1 意義不明的命名
1.2 難以理解的巢狀條件判斷結構
1.3 容易召喚各式各樣惡魔的資料類別
1.4 驅魔的基本
第 2 章 設計的第一步
2.1 選擇清楚表達功能的名稱
2.2 不重複使用變數,要為不同功能準備不同變數
2.3 不寫流水帳,把功能區分為函式
2.4 將相關的資料和邏輯統整到類別中
第 3 章 類別設計 ―串接一切的設計基礎―
3.1 設計時應確保類別能獨立運作
3.2 讓類別獨當一面的設計技巧
3.3 檢驗驅魔的效果
3.4 解決程式結構問題的設計模式
第 4 章 活用不可變性質 ―建立穩定的結果―
4.1 重複賦值
4.2 可變狀態帶來的意外後果
4.3 不可變和可變的處理方針
第 5 章 低內聚 ―七零八落的物件―
5.1 靜態函式的誤用
5.2 初始化函式的分散
5.3 通用工具類別(Common、Util)
5.4 使用引數回傳結果
5.5 過多的引數
5.6 成員變數串
第 6 章 條件判斷 ―解開迷宮般的流程控制―
6.1 巢狀條件判斷造成可讀性降低
6.2 大量重覆的 switch
6.3 重複、巢狀條件判斷
6.4 不要以型別判斷作為條件判斷
6.5 熟練運用介面是邁向中級者的第一步
6.6 旗標引數
第 7 章 集合 ―化解巢狀結構的結構化技術―
7.1 重覆製作集合原有的函式
7.2 迴圈內的巢狀條件判斷
7.3 低內聚的集合操作
第 8 章 密耦合 ―緊密糾纏、難分難解的結構―
8.1 密耦合與職責
8.2 密耦合的案例和解決方案
第 9 章 危害設計健全性的各種惡魔
9.1 死碼(Dead Code)
9.2 YAGNI 原則
9.3 魔法數字(magic number)
9.4 字串型別執著
9.5 全域變數
9.6 null 問題
9.7 例外的擱置
9.8 破壞設計秩序的元程式設計
9.9 套件的技術包裝法(技術驅動包裝)
9.10 複製貼上的範例程式碼
9.11 銀彈
第 10 章 名稱設計 ―讓人可以看透程式結構的名稱―
10.1 召來惡魔的名稱
10.2 設計名稱―目標式名稱設計
10.3 需要保持警覺的名稱事項
10.4 用途不明的名稱
10.5 導致構造大幅歪曲的名稱
10.6 和函式的位置格格不入的名稱
10.7 過度縮寫的名稱
第 11 章 註解 ―讓程式更穩定、更易修改的文字―
11.1 退化註解
11.2 用註解掩飾不良的命名
11.3 註解應標示用途及更改規格的注意事項
11.4 註解原則總結
11.5 註解文件
第 12 章 函式 ―優秀的類別必有優秀的函式―
12.1 使用同一類別的成員變數
12.2 以不可變為基礎以防止意外行為
12.3 只下令、不詢問
12.4 CQS(命令查詢分離)
12.5 引數
12.6 回傳值
第 13 章 建模 ―類別設計的基石―
13.1 容易陷入邪惡結構的 User 類別
13.2 模型的思考方式和理想的結構
13.3 不良模型的問題和解決方法
13.4 影響功能性的建模
第 14 章 重構 ―讓舊有程式碼脫胎換骨的技術―
14.1 重構的流程
14.2 以單元測試防止重構失誤
14.3 規格不明確時的分析方法
14.4 IDE 的重構功能
14.5 重構的注意事項
第 15 章 設計的意義與設計師的態度
15.1 本書所談論的設計問題
15.2 缺乏設計將導致開發效率下降
15.3 軟體與工程師的成長性
15.4 解決設計不良的問題
15.5 判斷程式碼好壞的軟體度量
15.6 程式碼的分析工具
15.7 設計目標與性價比
15.8 成為掌握時間的超能力者
第 16 章 克服職場的阻礙、實踐設計觀念與技術
16.1 溝通
16.2 設計
16.3 實作
16.4 審查
16.5 提升團隊的設計能力
第 17 章 軟體設計之旅的下一站
17.1 更進階的軟體設計書籍
17.2 提升設計技能的學習之路
序言
第 1 章 瞭解不良構造的後果
1.1 意義不明的命名
1.2 難以理解的巢狀條件判斷結構
1.3 容易召喚各式各樣惡魔的資料類別
1.4 驅魔的基本
第 2 章 設計的第一步
2.1 選擇清楚表達功能的名稱
2.2 不重複使用變數,要為不同功能準備不同變數
2.3 不寫流水帳,把功能區分為函式
2.4 將相關的資料和邏輯統整到類別中
第 3 章 類別設計 ―串接一切的設計基礎―
3.1 設計時應確保類別能獨立運作
3.2 讓類別獨當一面的設計技巧
3.3 檢驗驅魔的效果
3.4 解決程式結構問題的設計模式
第 4 章 活用不可變性質 ―建立穩定的...