第一部分 敏捷開發
第1章 敏捷實踐
1.1 敏捷聯盟
1.1.1 人和交互重於過程和工具
1.1.2 可以工作的軟件重於麵麵俱到的文檔
1.1.3 客戶閤作重於閤同談判
1.1.4 隨時應對變化重於遵循計劃
1.2 原則
1.3 結論
1.4 參考文獻
第2章 極限編程概述
2.1 極限編程實踐
2.1.1 完整團隊
2.1.2 用戶故事
2.1.3 短交付周期
2.1.4 驗收測試
2.1.5 結對編程
2.1.6 測試驅動開發
2.1.7 集體所有權
2.1.8 持續集成
2.1.9 可持續的開發速度
2.1.10 開放的工作空間
2.1.11 計劃遊戲
2.1.12 簡單設計
2.1.13 重構
2.1.14 隱喻
2.2 結論
2.3 參考文獻
第3章 計劃
3.1 初始探索
3.2 發布計劃
3.3 迭代計劃
3.4 定義“完成”
3.5 任務計劃
3.6 迭代
3.7 跟蹤
3.8 結論
3.9 參考文獻
第4章 測試
4.1 測試驅動開發
4.1.1 測試優先設計的例子
4.1.2 測試促使模塊之間隔離
4.1.3 意外獲得的解耦閤
4.2 驗收測試
4.3 意外獲得的構架
4.4 結論
4.5 參考文獻
第5章 重構
5.1 素數産生程序:一個簡單的重構示例
5.1.1 單元測試
5.1.2 重構
5.1.3 最後審視
5.2 結論
5.3 參考文獻
第6章 一次編程實踐
6.1 保齡球比賽
6.2 結論
第二部分 敏捷設計
第7章 什麼是敏捷設計
7.1 設計臭味
7.1.1 設計臭味——腐化軟件的氣味
7.1.2 僵化性
7.1.3 脆弱性
7.1.4 頑固性
7.1.5 粘滯性
7.1.6 不必要的復雜性
7.1.7 不必要的重復
7.1.8 晦澀性
7.2 軟件為何會腐化
7.3 Copy程序
7.3.1 熟悉的場景
7.3.2 Copy程序的敏捷設計
7.4 結論
7.5 參考文獻
第8章 SRP:單一職責原則
8.1 定義職責
8.2 分離耦閤的職責
8.3 持久化
8.4 結論
8.5 參考文獻
第9章 OCP:開放-封閉原則
9.1 OCP概述
9.2 Shape應用程序
9.2.1 違反OCP
9.2.2 遵循OCP
9.2.3 預測變化和“貼切的”結構
9.2.4 放置吊鈎
9.2.5 使用抽象獲得顯式封閉
9.2.6 使用“數據驅動”的方法獲取封閉性
9.3 結論
9.4 參考文獻
第10章 LSP:Liskov替換原則
10.1 違反LSP的情形
10.1.1 簡單例子
10.1.2 更微妙的違反情形
10.1.3 實際的例子
10.2 用提取公共部分的方法代替繼承
10.3 啓發式規則和習慣用法
10.4 結論
10.5 參考文獻
第11章 DIP:依賴倒置原則
11.1 層次化
11.1.1 倒置的接口所有權
11.1.2 依賴於抽象
11.2 簡單的DIP示例
11.3 熔爐示例
11.4 結論
11.5 參考文獻
第12章 ISP:接口隔離原則
12.1 接口汙染
12.2 分離客戶就是分離接口
12.3 類接口與對象接口
12.3.1 使用委托分離接口
12.3.2 使用多重繼承分離接口
12.4 ATM用戶界麵的例子
12.5 結論
12.6 參考文獻
第13章 C#程序員UML概觀
13.1 類圖
13.2 對象圖
13.3 順序圖
13.4 協作圖
13.5 狀態圖
13.6 結論
13.7 參考文獻
第14章 使用UML
14.1 為什麼建模
14.1.1 為什麼構建軟件模型
14.1.2 編碼前應該構建麵麵俱到的設計嗎
14.2 有效使用UML
14.2.1 與他人交流
14.2.2 脈絡圖
14.2.3 項目結束文檔
14.2.4 要保留的和要丟棄的
14.3 迭代式改進
14.3.1 行為優先
14.3.2 檢查結構
14.3.3 想象代碼
14.3.4 圖的演化
14.4 何時以及如何繪製圖示
14.4.1 何時要畫圖,何時不要畫圖
14.4.2 CASE 工具
14.4.3 那麼,文檔呢
14.5 結論
第15章 狀態圖
15.1 基礎知識
15.1.1 特定事件
15.1.2 超狀態
15.1.3 初始僞狀態和結束僞狀態
15.2 使用FSM圖示
15.3 結論
第16章 對象圖
16.1 即時快照
16.2 主動對象
16.3 結論
第17章 用例
17.1 編寫用例
17.1.1 備選流程
17.1.2 其他東西呢
17.2 用例圖
17.3 結論
17.4 參考文獻
第18章 順序圖
18.1 基礎知識
18.1.1 對象、生命綫、消息及其他
18.1.2 創建和析構
18.1.3 簡單循環
18.1.4 時機和場閤
18.2 高級概念
18.2.1 循環和條件
18.2.2 耗費時間的消息
18.2.3 異步消息
18.2.4 多綫程
18.2.5 主動對象
18.2.6 嚮接口發送消息
18.3 結論
第19章 類圖
19.1 基礎知識
19.1.1 類
19.1.2 關聯
19.1.3 繼承
19.2 類圖示例
19.3 細節
19.3.1 類衍型
19.3.2 抽象類
19.3.3 屬性
19.3.4 聚集
19.3.5 組閤
19.3.6 多重性
19.3.7 關聯衍型
19.3.8 內嵌類
19.3.9 關聯類
19.3.10 關聯修飾符
19.4 結論
19.5 參考文獻
第20章 咖啡的啓示
20.1 Mark IV型專用咖啡機
20.1.1 規格說明書
20.1.2 常見的醜陋方案
20.1.3 虛構的抽象
20.1.4 改進方案
20.1.5 實現抽象模型
20.1.6 這個設計的好處
20.2 麵嚮對象過度設計
20.3 參考文獻
第三部分 薪水支付案例研究
第21章 COMMAND模式和ACTIVE OBJECT模式:多功能與多任務
21.1 簡單的Command
21.2 事務
21.2.1 實體上解耦和時間上解耦
21.2.2 時間上解耦
21.3 Undo()方法
21.4 ACTIVE OBJECT模式
21.5 結論
21.6 參考文獻
第22章 TEMPLATE METHOD模式和STRATEGY模式:繼承和委托
22.1 TEMPLATE METHOD模式
22.1.1 濫用模式
22.1.2 冒泡排序
22.2 STRATEGY模式
22.3 結論
22.4 參考文獻
第23章 FACADE模式和MEDIATOR模式
23.1 FACADE模式
23.2 MEDIATOR模式
23.3 結論
23.4 參考文獻
第24章 SINGLETON模式和MONOSTATE模式
24.1 SINGLETON模式
24.1.1 SINGLETON模式的好處
24.1.2 SINGLETON模式的代價
24.1.3 運用SINGLETON模式
24.2 MONOSTATE模式
24.2.1 MONOSTATE模式的好處
24.2.2 MONOSTATE模式的代價
24.2.3 運用MONOSTATE模式
24.3 結論
24.4 參考文獻
第25章 NULL OBJECT模式
25.1 描述
25.2 結論
25.3 參考文獻
第26章 薪水支付案例研究:第一次迭代開始
26.1 初步的規格說明
26.2 基於用例分析
26.2.1 增加新雇員
26.2.2 刪除雇員
26.2.3 登記考勤卡
26.2.4 登記銷售憑條
26.2.5 登記工會服務費
26.2.6 更改雇員明細
26.2.7 發薪日
26.3 反思:找齣底層的抽象
26.3.1 雇員支付類彆抽象
26.3.2 支付時間錶抽象
26.3.3 支付方式
26.3.4 從屬關係
26.4 結論
26.5 參考文獻
第27章 薪水支付案例研究:實現
27.1 事務
27.1.1 增加雇員
27.1.2 刪除雇員
27.1.3 考勤卡、銷售憑條以及服務費用
27.1.4 更改雇員屬性
27.1.5 犯瞭什麼暈
27.1.6 支付雇員薪水
27.1.7 支付領月薪的雇員薪水
27.1.8 支付鍾點工薪水
27.2 主程序
27.3 數據庫
27.4 結論
27.5 關於本章
27.6 參考文獻
第四部分 打包薪水支付係統
第28章 包和組件的設計原則
28.1 包和組件
28.2 組件的內聚性原則:粒度
28.2.1 重用—發布等價原則
28.2.2 共同重用原則
28.2.3 共同封閉原則
28.2.4 組件內聚性總結
28.3 組件的耦閤性原則:穩定性
28.3.1 無環依賴原則
28.3.2 穩定依賴原則
28.3.3 穩定抽象原則
28.4 結論
第29章 FACTORY模式
29.1 依賴問題
29.2 靜態類型與動態類型
29.3 可替換的工廠
29.4 對測試支架使用對象工廠
29.5 工廠的重要性
29.6 結論
29.7 參考文獻
第30章 薪水支付案例研究:包分析
30.1 組件結構和符號
30.2 應用CCP
30.3 應用REP
30.4 耦閤和封裝
30.5 度量
30.6 度量薪水支付應用程序
30.6.1 對象工廠
30.6.2 重新思考內聚的邊界
30.7 最終的包結構
30.8 結論
30.9 參考文獻
第31章 COMPOSITE模式
31.1 組閤命令
31.2 多重性還是非多重性
31.3 結論
第32章 OBSERVER——演化至模式
32.1 數字時鍾
32.2 OBSERVER模式
32.2.1 模型
32.2.2 麵嚮對象設計原則的運用
32.3 結論
32.4 參考文獻
第33章 ABSTRACT SERVER模式、 ADAPTER模式和BRIDGE模式
33.1 ABSTRACT SERVER模式
33.2 ADAPTER模式
33.2.1 類形式的ADAPTER模式
33.2.2 調製解調器問題、適配器以及LSP
33.3 BRIDGE模式
33.4 結論
33.5 參考文獻
第34章 PROXY模式和GATEWAY模式:管理第三方API
34.1 PROXY模式
34.1.1 實現PROXY模式
34.1.2 小結
34.2 數據庫、中間件以及其他第三方接口
34.3 TABLE DATA GATEWAY
34.3.1 測試和內存TDG
34.3.2 測試DbGateWay
34.4 可以用於數據庫的其他模式
34.5 結論
34.6 參考文獻
第35章 VISITOR模式
35.1 VISITOR模式
35.2 ACYCLIC VISITOR模式
35.3 DECORATOR模式
35.4 EXTENSION OBJECT模式
35.5 結論
35.6 參考文獻
第36章 STATE模式
36.1 嵌套switch/case語句
36.1.1 內部作用域的狀態變量
36.1.2 測試動作
36.1.3 代價和收益
36.2 遷移錶
36.2.1 使用錶解釋
36.2.2 代價和收益
36.3 STATE模式
36.3.1 STATE模式和 STRATEGY模式
36.3.2 代價和收益
36.4 狀態機編譯器
36.4.1 SMC生成的Turnstile.cs以及其他支持文件
36.4.2 代價和收益
36.5 狀態機應用的場閤
36.5.1 作為GUI中的高層應用策略
36.5.2 GUI交互控製器
36.5.3 分布式處理
36.6 結論
36.7 參考文獻
第37章 薪水支付案例研究:數據庫
37.1 構建數據庫
37.2 一個代碼設計缺陷
37.3 增加雇員
37.4 事務
37.5 加載Employee對象
37.6 還有什麼工作
第38章 薪水支付係統用戶界麵:Model-View-Presenter
38.1 界麵
38.2 實現
38.3 構建窗口
38.4 Payroll窗口
38.5 真麵目
38.6 結論
38.7 參考文獻
附錄A 雙公司記
Rufus公司:“日落”項目
Rupert工業公司:“朝暉”項目
附錄B 什麼是軟件
索引
· · · · · · (
收起)