內容簡介
通過《敏捷軟體開發:原則模式和實踐(C#版)》你會發現,許多以前看起來非常枯燥費解的概念,忽然間都豁然開朗。變得鮮活生動起來。
C#版與此前的Java版相比,主要的更新包括加強了UML的介紹章節。使其更加貼近實戰;增加了對MVP模式的介紹等。
目錄
第一部分 敏捷開發
第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 什麼是軟體
索引