作為軟體的基石,代碼的質量決定了最終產品的質量,本書從這一點出發,介紹了高質量C#代碼的成就過程,即從基礎代碼到軟體結構,以及不斷最佳化和重構的過程。本書主要內容包括C#的基本語法、結構與套用特點,常用開發資源與技術要點,設計模式在C#中的套用等,以及特別重要的一點,即我們應該養成良好的開發習慣,不僅要注重技術細節,還要從更寬闊的視野角度來重新審視代碼的構建工作。無論你是C#初學者,還是正在套用C#的開發者,如果你關注代碼的質量,願意進一步提高軟體項目的質量,本書能為你提供幫助。
基本介紹
- 書名:構建高質量的C#代碼
- 出版社:電子工業出版社
- 頁數:431頁
- 開本:16
- 品牌:電子工業出版社
- 作者:曹化宇
- 出版日期:2013年4月1日
- 語種:簡體中文
- ISBN:9787121197130
內容簡介,作者簡介,圖書目錄,序言,
內容簡介
《構建高質量的C#代碼》編輯推薦:431段精選代碼助您創建更靈活更富彈性的軟體架構。
作者簡介
曹化宇,獨立軟體開發人,主要研究方向為軟體工程、設計模式與互動設計;最大的興趣就是coding、技術寫作、文學創作,以及研究各種軟體開發技術。在知識的海洋里,每個人的力量如水滴一般微不足道,但我們可以努力去做好自己的事情,從而共同創建一片更加廣闊而美好的知識海洋。
圖書目錄
第1章開啟C#之旅
1.1軟體開發概述
1.1.1開發套用軟體
1.1.2軟體開發的一般步驟
1.2代碼構建的重要性
1.3認識C#程式語言
1.3.1C#簡史
1.3.2C#關鍵字及相關標識符
1.3.3C#中的語句和表達式
1.4構建C#開發環境
1.4.1安裝開發環境
1.4.2C#程式的基本結構
1.4.3如何創建窗體程式
1.5高質量代碼準則:可閱讀
1.5.1養成好的代碼編寫習慣
1.5.2代碼不是私人財產,而是藝術品
1.5.3代碼應該具有可維護性
1.5.4注釋你的代碼
1.6高質量代碼準則:用實踐證明一切
1.7高質量代碼準則:好心情帶來高質量
1.8準備你的開發工具箱
第2章處理數據
2.1C#數據處理基礎
2.1.1C#數據類型
2.1.2變數與常量
2.1.3高質量代碼準則:給變數起個好名字
2.1.4值類型與引用類型
2.1.5字面值
2.2整數
2.2.1整數的一般運算
2.2.2溢出檢查
2.2.3++與——運算
2.2.4移位運算
2.2.5高質量代碼準則:準確使用整數
2.3浮點數與deCimal類型
2.3.1浮點數與deCimal數據的運算
2.3.2高質量代碼準則:合理使用浮點數和deCimal類型
2.4布爾類型
2.4.1布爾運算
2.4.2布爾類型數據的用途
2.5字元
2.5.1Char類型
2.5.2asCii碼錶(0~127)
2.6字元串
2.6.1轉義字元
2.6.2逐字字元串(@)
2.6.3字元串的常用操作
2.6.4單個字元時使用Char類型
2.6.5使用stringbuilder類型
2.7日期與時間的處理
2.7.1使用datetime結構類型
2.7.2獲取中國農曆信息
2.8數據類型的轉換
2.8.1顯式轉換
2.8.2隱式轉換
2.8.3tryparse()方法轉換
2.8.4使用Convert類
2.8.5轉換是有代價的
2.9objeCt類型
2.9.1一切皆對象
2.9.2裝箱和拆箱
2.9.3高質量代碼準則:objeCt不應作為萬能類型
2.10C#運算符
第3章控制程式流程
3.1if語句
3.1.1使用if語句
3.1.2注意事項
3.2switCh語句
3.2.1使用switCh語句
3.2.2注意事項
3.3for語句
3.3.1使用for語句
3.3.2注意事項
3.4while語句
3.4.1使用while語句
3.4.2注意事項
3.5do語句
3.5.1使用do語句
3.5.2注意事項
3.6foreaCh語句
3.6.1使用foreaCh語句
3.6.2注意事項
3.7break語句
3.8Continue語句
3.9goto語句與標籤
第4章處理異常
4.1C#中的異常處理
4.1.1exCeption類型
4.1.2try—CatCh語句結構
4.1.3處理具體的異常類
4.1.4使用finally語句塊
4.1.5throw語句
4.2高質量代碼準則:處理異常智慧型化、模式化
4.3在visualC#中調試代碼
第5章數組
5.1C#中的數組
5.1.1簡單數組
5.1.2洗牌——隨機排序算法
5.1.3多維數組
5.2使用array類
5.2.1排序
5.2.2反序排列
5.2.3修改成員數量
5.3使用arraylist類
5.4使用hashtable類
5.5表驅動法——完善中國農曆信息的處理
第6章結構
6.1創建結構類型
6.2結構成員
6.2.1結構中的方法
6.2.2結構中的屬性
6.2.3其他成員
6.3結構的套用
第7章枚舉
7.1C#中的枚舉
7.2枚舉的套用
第8章類
8.1創建類的作用與目的
8.2C#中的類
8.2.1創建類
8.2.2創建類的實例
8.2.3構造函式與析構函式
8.2.4構造函式的重載
8.2.5構造函式鏈
8.3類成員的可訪問性
8.4變數
8.5屬性
8.6方法
8.6.1創建方法
8.6.2方法的參數
8.6.3方法的返回值
8.6.4方法的重載
8.6.5高質量代碼準則:創建高質量的方法
8.7索引器
8.8靜態類與靜態成員
8.8.1靜態成員
8.8.2靜態類
8.9關於類的更多內容
8.10高質量代碼準則:創建高質量的類
8.11封裝中國農曆信息類
8.11.1第一個版本
8.11.2重構版本
第9章類的繼承
9.1繼承概述
9.1.1現實世界中的繼承
9.1.2C#中的繼承
9.1.3能否繼承
9.2子類
9.2.1擴展功能
9.2.2隱藏基類成員
9.2.3區分子類與基類成員
9.2.4重寫虛成員
9.3抽象類與抽象成員
9.4繼承的局限性
第10章接口
10.1接口的特點
10.2創建接口
10.3實現接口
10.4接口的繼承
10.5實現多個接口
第11章委託與事件
11.1訪問者模式
11.2委託
11.3事件
11.4多路廣播委託
第12章命名空間
12.1命名空間的成員
12.2命名空間的組織
12.3引用與別名
12.3.1引用命名空間
12.3.2命名空間別名
12.4使用miCrosoft.visualbasiC命名空間
12.4.1獲取作業系統與記憶體信息
12.4.2播放波形檔案
12.4.3網路基本套用
第13章泛型
13.1泛型方法
13.2泛型類
13.3約束
第14章運算符重載
14.1在結構中重載運算符
14.2在類中重載運算符
第15章資源同步與自動清理
15.1多執行緒
15.2易失域(volatilefield)
15.3loCk語句
15.4using語句
第16章關於C#的其他主題
16.1預處理
16.1.1根據條件編譯代碼
16.1.2發布警告或錯誤
16.1.3定義代碼區域
16.2特性
16.2.1使用dllimportattribute特性
16.2.2自定義特性
16.3不安全代碼
16.3.1指針與定址運算
16.3.2sizeof運算
16.4分部類型(partialtype)
16.5可空類型(nullabletype)
第17章代碼的進化
17.1從代碼到架構
17.1.1基礎代碼
17.1.2代碼集成
17.2重構
17.3設計模式
17.4關注代碼改進的過程
17.5找尋.netframework中的設計模式
17.5.1疊代器模式
17.5.2適配器模式
17.5.3模板方法模式
第18章策略模式
18.1虛擬戰爭遊戲示例:使用策略模式組合作戰單位
18.1.1第一設計方案
18.1.2陸、海、空
18.1.3真正的設計方案
18.1.4組合第一個作戰單位
18.1.5這一切是怎樣發生的
18.2套用分析
18.2.1問題
18.2.2解決方案
18.2.3套用特點
第19章工廠方法模式
19.1虛擬戰爭遊戲示例:控制作戰單位的創建
19.1.1收起自由創建單位的權力
19.1.2控制作戰單位類型
19.1.3統一作戰單位的創建方法
19.2套用分析
19.2.1問題
19.2.2解決方案
19.2.3使用空對象
19.2.4套用特點
19.3工廠方法的套用
19.3.1代替構造函式
19.3.2隱藏特殊對象的創建
第20章抽象工廠模式
20.1示例:模擬組裝電腦
20.2套用分析
20.2.1問題
20.2.2解決方案
20.2.3套用特點
20.2.4與工廠方法模式的對比
第21章生成器模式
21.1示例:創建汽車配置清單
21.2套用分析
21.2.1問題
21.2.2解決方案
21.2.3套用特點
第22章單件模式
22.1虛擬戰爭遊戲示例:唯一的重要人物
22.1.1重要人物登場
22.1.2套用單件模式
22.2套用分析
22.2.1問題
22.2.2解決方案
22.2.3套用特點
22.2.4多執行緒中的單件
第23章觀察者模式
23.1訂閱郵件——現實版觀察者模式
23.2虛擬戰爭遊戲示例:空降作戰
23.2.1準備登機
23.2.2諾曼第大空降
23.3.netframework4.0中的觀察者
23.4套用分析
23.4.1問題
23.4.2解決方案
23.4.3套用特點
第24章享元模式
24.1虛擬戰爭遊戲示例:點綴作戰地圖
24.1.1第一個方案
24.1.2使用享元模式
24.2套用分析
24.2.1問題
24.2.2解決方案
24.2.3套用特點
第25章組合模式
25.1虛擬戰爭遊戲示例:多武器平台
25.1.1一個平台,多種武器
25.1.2使用組合模式
25.2套用分析
25.2.1問題
25.2.2解決方案
25.2.3套用特點
第26章裝飾者模式
26.1三國遊戲示例:裝備提高戰鬥力
26.1.1角色與裝備
26.1.2使用裝飾者模式
26.2套用分析
26.2.1問題
26.2.2解決方案
26.2.3套用特點
第27章狀態模式
27.1三國遊戲示例:角色被擊中後
27.1.1添加角色狀態
27.1.2使用狀態模式
27.2套用分析
27.2.1問題
27.2.2解決方案
27.2.3套用特點
第28章橋接模式
28.1繪圖示例:繪製圖形與文本
28.1.1抽象與實現的分離
28.1.2套用橋接模式
28.2套用分析
28.2.1問題
28.2.2解決方案
28.2.3套用特點
第29章軟體開發之路
29.1C#與設計模式
29.2如何使用設計模式
29.3繼續學習
附錄a設計模式名錄
1.1軟體開發概述
1.1.1開發套用軟體
1.1.2軟體開發的一般步驟
1.2代碼構建的重要性
1.3認識C#程式語言
1.3.1C#簡史
1.3.2C#關鍵字及相關標識符
1.3.3C#中的語句和表達式
1.4構建C#開發環境
1.4.1安裝開發環境
1.4.2C#程式的基本結構
1.4.3如何創建窗體程式
1.5高質量代碼準則:可閱讀
1.5.1養成好的代碼編寫習慣
1.5.2代碼不是私人財產,而是藝術品
1.5.3代碼應該具有可維護性
1.5.4注釋你的代碼
1.6高質量代碼準則:用實踐證明一切
1.7高質量代碼準則:好心情帶來高質量
1.8準備你的開發工具箱
第2章處理數據
2.1C#數據處理基礎
2.1.1C#數據類型
2.1.2變數與常量
2.1.3高質量代碼準則:給變數起個好名字
2.1.4值類型與引用類型
2.1.5字面值
2.2整數
2.2.1整數的一般運算
2.2.2溢出檢查
2.2.3++與——運算
2.2.4移位運算
2.2.5高質量代碼準則:準確使用整數
2.3浮點數與deCimal類型
2.3.1浮點數與deCimal數據的運算
2.3.2高質量代碼準則:合理使用浮點數和deCimal類型
2.4布爾類型
2.4.1布爾運算
2.4.2布爾類型數據的用途
2.5字元
2.5.1Char類型
2.5.2asCii碼錶(0~127)
2.6字元串
2.6.1轉義字元
2.6.2逐字字元串(@)
2.6.3字元串的常用操作
2.6.4單個字元時使用Char類型
2.6.5使用stringbuilder類型
2.7日期與時間的處理
2.7.1使用datetime結構類型
2.7.2獲取中國農曆信息
2.8數據類型的轉換
2.8.1顯式轉換
2.8.2隱式轉換
2.8.3tryparse()方法轉換
2.8.4使用Convert類
2.8.5轉換是有代價的
2.9objeCt類型
2.9.1一切皆對象
2.9.2裝箱和拆箱
2.9.3高質量代碼準則:objeCt不應作為萬能類型
2.10C#運算符
第3章控制程式流程
3.1if語句
3.1.1使用if語句
3.1.2注意事項
3.2switCh語句
3.2.1使用switCh語句
3.2.2注意事項
3.3for語句
3.3.1使用for語句
3.3.2注意事項
3.4while語句
3.4.1使用while語句
3.4.2注意事項
3.5do語句
3.5.1使用do語句
3.5.2注意事項
3.6foreaCh語句
3.6.1使用foreaCh語句
3.6.2注意事項
3.7break語句
3.8Continue語句
3.9goto語句與標籤
第4章處理異常
4.1C#中的異常處理
4.1.1exCeption類型
4.1.2try—CatCh語句結構
4.1.3處理具體的異常類
4.1.4使用finally語句塊
4.1.5throw語句
4.2高質量代碼準則:處理異常智慧型化、模式化
4.3在visualC#中調試代碼
第5章數組
5.1C#中的數組
5.1.1簡單數組
5.1.2洗牌——隨機排序算法
5.1.3多維數組
5.2使用array類
5.2.1排序
5.2.2反序排列
5.2.3修改成員數量
5.3使用arraylist類
5.4使用hashtable類
5.5表驅動法——完善中國農曆信息的處理
第6章結構
6.1創建結構類型
6.2結構成員
6.2.1結構中的方法
6.2.2結構中的屬性
6.2.3其他成員
6.3結構的套用
第7章枚舉
7.1C#中的枚舉
7.2枚舉的套用
第8章類
8.1創建類的作用與目的
8.2C#中的類
8.2.1創建類
8.2.2創建類的實例
8.2.3構造函式與析構函式
8.2.4構造函式的重載
8.2.5構造函式鏈
8.3類成員的可訪問性
8.4變數
8.5屬性
8.6方法
8.6.1創建方法
8.6.2方法的參數
8.6.3方法的返回值
8.6.4方法的重載
8.6.5高質量代碼準則:創建高質量的方法
8.7索引器
8.8靜態類與靜態成員
8.8.1靜態成員
8.8.2靜態類
8.9關於類的更多內容
8.10高質量代碼準則:創建高質量的類
8.11封裝中國農曆信息類
8.11.1第一個版本
8.11.2重構版本
第9章類的繼承
9.1繼承概述
9.1.1現實世界中的繼承
9.1.2C#中的繼承
9.1.3能否繼承
9.2子類
9.2.1擴展功能
9.2.2隱藏基類成員
9.2.3區分子類與基類成員
9.2.4重寫虛成員
9.3抽象類與抽象成員
9.4繼承的局限性
第10章接口
10.1接口的特點
10.2創建接口
10.3實現接口
10.4接口的繼承
10.5實現多個接口
第11章委託與事件
11.1訪問者模式
11.2委託
11.3事件
11.4多路廣播委託
第12章命名空間
12.1命名空間的成員
12.2命名空間的組織
12.3引用與別名
12.3.1引用命名空間
12.3.2命名空間別名
12.4使用miCrosoft.visualbasiC命名空間
12.4.1獲取作業系統與記憶體信息
12.4.2播放波形檔案
12.4.3網路基本套用
第13章泛型
13.1泛型方法
13.2泛型類
13.3約束
第14章運算符重載
14.1在結構中重載運算符
14.2在類中重載運算符
第15章資源同步與自動清理
15.1多執行緒
15.2易失域(volatilefield)
15.3loCk語句
15.4using語句
第16章關於C#的其他主題
16.1預處理
16.1.1根據條件編譯代碼
16.1.2發布警告或錯誤
16.1.3定義代碼區域
16.2特性
16.2.1使用dllimportattribute特性
16.2.2自定義特性
16.3不安全代碼
16.3.1指針與定址運算
16.3.2sizeof運算
16.4分部類型(partialtype)
16.5可空類型(nullabletype)
第17章代碼的進化
17.1從代碼到架構
17.1.1基礎代碼
17.1.2代碼集成
17.2重構
17.3設計模式
17.4關注代碼改進的過程
17.5找尋.netframework中的設計模式
17.5.1疊代器模式
17.5.2適配器模式
17.5.3模板方法模式
第18章策略模式
18.1虛擬戰爭遊戲示例:使用策略模式組合作戰單位
18.1.1第一設計方案
18.1.2陸、海、空
18.1.3真正的設計方案
18.1.4組合第一個作戰單位
18.1.5這一切是怎樣發生的
18.2套用分析
18.2.1問題
18.2.2解決方案
18.2.3套用特點
第19章工廠方法模式
19.1虛擬戰爭遊戲示例:控制作戰單位的創建
19.1.1收起自由創建單位的權力
19.1.2控制作戰單位類型
19.1.3統一作戰單位的創建方法
19.2套用分析
19.2.1問題
19.2.2解決方案
19.2.3使用空對象
19.2.4套用特點
19.3工廠方法的套用
19.3.1代替構造函式
19.3.2隱藏特殊對象的創建
第20章抽象工廠模式
20.1示例:模擬組裝電腦
20.2套用分析
20.2.1問題
20.2.2解決方案
20.2.3套用特點
20.2.4與工廠方法模式的對比
第21章生成器模式
21.1示例:創建汽車配置清單
21.2套用分析
21.2.1問題
21.2.2解決方案
21.2.3套用特點
第22章單件模式
22.1虛擬戰爭遊戲示例:唯一的重要人物
22.1.1重要人物登場
22.1.2套用單件模式
22.2套用分析
22.2.1問題
22.2.2解決方案
22.2.3套用特點
22.2.4多執行緒中的單件
第23章觀察者模式
23.1訂閱郵件——現實版觀察者模式
23.2虛擬戰爭遊戲示例:空降作戰
23.2.1準備登機
23.2.2諾曼第大空降
23.3.netframework4.0中的觀察者
23.4套用分析
23.4.1問題
23.4.2解決方案
23.4.3套用特點
第24章享元模式
24.1虛擬戰爭遊戲示例:點綴作戰地圖
24.1.1第一個方案
24.1.2使用享元模式
24.2套用分析
24.2.1問題
24.2.2解決方案
24.2.3套用特點
第25章組合模式
25.1虛擬戰爭遊戲示例:多武器平台
25.1.1一個平台,多種武器
25.1.2使用組合模式
25.2套用分析
25.2.1問題
25.2.2解決方案
25.2.3套用特點
第26章裝飾者模式
26.1三國遊戲示例:裝備提高戰鬥力
26.1.1角色與裝備
26.1.2使用裝飾者模式
26.2套用分析
26.2.1問題
26.2.2解決方案
26.2.3套用特點
第27章狀態模式
27.1三國遊戲示例:角色被擊中後
27.1.1添加角色狀態
27.1.2使用狀態模式
27.2套用分析
27.2.1問題
27.2.2解決方案
27.2.3套用特點
第28章橋接模式
28.1繪圖示例:繪製圖形與文本
28.1.1抽象與實現的分離
28.1.2套用橋接模式
28.2套用分析
28.2.1問題
28.2.2解決方案
28.2.3套用特點
第29章軟體開發之路
29.1C#與設計模式
29.2如何使用設計模式
29.3繼續學習
附錄a設計模式名錄
序言
本書關注的主題是如何使用C#寫出高質量的代碼。
我們知道,高質量的代碼是優秀軟體的基礎,創建高質量的代碼是每一個真正的程式設計師堅持不懈的追求,同時,也是一項艱巨而又充滿樂趣的工作。我們認為,在編寫高質量代碼的過程中,需要考慮以下三個方面:
編寫高質量的基礎代碼。我們會使用某種程式語言寫出語句或基礎結構,比如我們使用C#語言定義變數,或者是創建選擇語句、循環語句結構,又或者定義方法、結構、類、接口,等等。這些內容作為軟體代碼中的基本元素,與所使用的程式語言的特點是息息相關的。只有當我們熟練掌握併合理使用了程式語言的特點,才能寫出高質量的基礎代碼。
創建高質量的代碼結構。在這裡所說的代碼結構,是指在軟體開發中,用於實現業務模型的軟體架構。高質量的軟體架構可以幫助我們有效完成業務模型所要達到的設計目標,同時,也可以應對不斷變化的軟體需求。在軟體開發和經驗積累的過程中,產生了眾多的軟體開發技術和方法,它們可能與程式語言無關,但對應於每一種程式語言,實現起來又有一定的獨特性。設計模式就是在不斷的開發和積累過程中,發現並總結出的一系列用於最佳化代碼結構的方法。在軟體開發中合理地使用成熟的設計模式,可以幫助我們高效地創建靈活、易擴展、富有彈性的軟體架構。這也是我們在應對“需求不斷變化”這一軟體開發中唯一不變真理時的常用且行之有效的開發技術。
逐步改進。無論是基礎代碼還是代碼結構,要想在初次開發時就能達到很高質量的可能性並不是很大。因此,這就需要我們對代碼進行不斷的改進,而改進的步驟應該是循序漸進的,而不是暴風驟雨似的。在軟體開發中,代碼和架構的改進過程,也就是重構(Refactoring)的過程,需要我們對每一條語句或語句結構、算法、架構進行逐步的改進和最佳化。其中,對於軟體架構的重構過程,往往就是套用或去除設計模式的過程。而我們應該注意的是,重構是在不改變或少量修改代碼外在行為的基礎上,對其內部結構的最佳化,以便達到代碼和架構設計更合理、更簡潔、更靈活的目的。重要的是,只有在不斷的嘗試和挫折中才能讓我們積累到更多的、有價值的軟體開發經驗。此外,我們應該注意代碼逐步改進的過程,在這個不斷嘗試的過程中,會產生多個代碼和架構的版本,只有通過對比,我們才能找出最合適的解決方案,這也是經驗積累的重要過程。
本書將結合C#程式語言、重構與設計模式,在掌握C#語言基礎知識的同時,進一步學習如何使用C#語言實現一些常用的設計模式,而重構則是不斷地進行基礎代碼與軟體架構逐步最佳化的過程,在這一過程中,我們將需要更多地理解高質量代碼的進化過程,從而可以幫助我們在使用C#語言開發軟體時,能夠更合理、更高效地創建出高質量的代碼,並使軟體架構變得更易維護、更靈活、更富有彈性。
本書特點
享受充滿樂趣的學習與開發過程。軟體開發應該是一個充滿樂趣的過程,而軟體開發的學習過程也應該是這樣。本書使用了通俗易懂的語言,結合比較有趣的示例代碼,比如大量使用了模擬創建遊戲的代碼示例,讓大家在一個比較輕鬆的氛圍中學習和套用知識點。
豐富而實用的代碼示例。本書包含了大量的示例代碼,並在其中穿插了很多實用的內容,比如隨機排序算法、中國農曆信息的獲取、樹狀結構,以及大量的設計模式模型,等等。大家可以在自己的軟體中直接使用這些代碼,也可以根據需求對其進行修改、擴展或者簡化,從而可以更有效、更合理地運用這些算法和代碼結構。
大量實用的開發技巧和方法。在討論知識點的時候,我們列舉了大量的實用開發技巧和方法,並通過實際測試來解答一些技術上的疑問,真正做到能見到樹木,亦能見到森林。
本書內容
本書主要包括以下幾個部分的內容:
C#程式語言,涵蓋了使用C#開發套用軟體過程中常用的內容,如數據類型、結構化語句、數組、結構類型、枚舉類型、類、委託、泛型、接口、多執行緒與資源同步等。並對一些不太常用的內容做了簡單的介紹,如預處理、特性、不安全代碼、分部類型和可空類型等。
設計模式,介紹了在C#和.NETFramework中套用的四種設計模式,包括訪問者、疊代器、適配器和模板方法模式。然後,我們詳細介紹了11種設計模式,它們是策略、工廠方法、抽象工廠、生成器、單件、觀察者、享元、組合、裝飾者、狀態和橋接模式,並創建了這些設計模式的基本模型,這些都是在C#開發套用軟體過程中可能會經常使用到的模式。讀者應該在學習和使用設計模式的過程中領悟到軟體開發的精髓和本質所在,而不只是照葫蘆畫瓢。讀者應該明白,套用設計模式並不是我們的目標,我們的目標是創建高質量的軟體,任何技術的取捨都應該基於這一目標。
在貫穿全書的內容中,我們穿插介紹了各種編寫高質量代碼、架構,以及逐步改進的方法、技巧,並給出了一些代碼演化的過程。
最後,我們討論了C#、設計模式、重構,以及軟體構建中涉及的一些主題,感興趣的讀者可以選擇一些主題進行深入的學習和研究,以擴展自己在軟體開發方面的知識面。
讀者類型
對於本書的讀者,你可以是:
軟體開發的初學者,可以從基礎的C#程式語言開始學習,然後,逐步學習設計模式的套用過程,以提高自己對代碼結構整體的把握能力。
從其他語言轉到C#語言的讀者,無論你是不是已經會使用VB、C++,或者Java,都可以很快地適應C#開發的便利性,並且可以通過設計模式在C#中的套用,更深入地理解C#語言的特點和軟體構建方法。
C#使用者,如果你正在使用C#語言進行軟體的開發工作,可以從本書學習到如何在C#中套用一些常見的設計模式,以便提高我們對軟體代碼的重構和最佳化能力。同時,從C#程式語言的角度,本書也可以作為參考手冊,供你隨時查詢相關的知識點。
本書的使用
如果你對C#語言和.NETFramework不太熟悉,可以從第1章開始逐章閱讀,一步步深入學習相關知識。
如果你已經對C#比較熟悉,可以直接閱讀在C#中使用設計模式的相關內容。
本書也可以作為C#語言以及設計模式的參考手冊,讀者在開發的過程中,可以隨時在本書中查詢C#語言與套用設計模式,以及了解如何改進和最佳化軟體代碼和架構。
此外,代碼與架構重構的過程介紹,穿插於不同的主題之中,方便讀者直觀地了解套用相關技術需要注意的問題,以及代碼和架構最佳化,即逐步改進的過程。
學習方法
你可以先通讀一遍。如果你的時間比較緊,至少應該先看一下目錄,了解一下本書有哪些內容,這樣,可以做到對全書的結構和內容有一個初步的了解。
然後,你可以從第1章開始,或者選擇自己感興趣的內容閱讀,但你應該充分理解每一個知識點和示例。學習軟體開發最好的方法就是實踐,讀者應該多讀代碼、多寫代碼。建議有條件的讀者可以自己輸入本書中的所有示例,並儘可能地去嘗試修改代碼,測試不同的方式帶來的運行結果上的差異。相信這么多的代碼敲下來,讀者對代碼的理解會更深入。另外,這樣做還會有一個額外的收穫,那就是你的打字速度可能會有所提高。在閱讀過程中,對於不太明白的地方,不用著急,當你系統地學習後,一些難題就會迎刃而解。
請注意,如果你對哪個知識點暫時不能理解,可以先放鬆一下,如玩玩休閒小遊戲、睡一覺,或者出去散散步,再靜下心來時,答案就很可能自然地出現在腦海里了。
最後一點,在學習的過程,手邊一定要有筆和紙,隨便寫寫、畫畫對我們的學習都會有所幫助,有時還會有意外的收穫。
交流與反饋
就像開發軟體一樣,撰寫一本書也不太可能在一開始就達到完美的境地。如果讀者發現什麼問題,或者有些什麼建議,又或者只是交流一下軟體開發的心得,都可以給我發來E-mail。
祝大家在軟體開發的過程中玩得開心!
作者
2013年1月
我們知道,高質量的代碼是優秀軟體的基礎,創建高質量的代碼是每一個真正的程式設計師堅持不懈的追求,同時,也是一項艱巨而又充滿樂趣的工作。我們認為,在編寫高質量代碼的過程中,需要考慮以下三個方面:
編寫高質量的基礎代碼。我們會使用某種程式語言寫出語句或基礎結構,比如我們使用C#語言定義變數,或者是創建選擇語句、循環語句結構,又或者定義方法、結構、類、接口,等等。這些內容作為軟體代碼中的基本元素,與所使用的程式語言的特點是息息相關的。只有當我們熟練掌握併合理使用了程式語言的特點,才能寫出高質量的基礎代碼。
創建高質量的代碼結構。在這裡所說的代碼結構,是指在軟體開發中,用於實現業務模型的軟體架構。高質量的軟體架構可以幫助我們有效完成業務模型所要達到的設計目標,同時,也可以應對不斷變化的軟體需求。在軟體開發和經驗積累的過程中,產生了眾多的軟體開發技術和方法,它們可能與程式語言無關,但對應於每一種程式語言,實現起來又有一定的獨特性。設計模式就是在不斷的開發和積累過程中,發現並總結出的一系列用於最佳化代碼結構的方法。在軟體開發中合理地使用成熟的設計模式,可以幫助我們高效地創建靈活、易擴展、富有彈性的軟體架構。這也是我們在應對“需求不斷變化”這一軟體開發中唯一不變真理時的常用且行之有效的開發技術。
逐步改進。無論是基礎代碼還是代碼結構,要想在初次開發時就能達到很高質量的可能性並不是很大。因此,這就需要我們對代碼進行不斷的改進,而改進的步驟應該是循序漸進的,而不是暴風驟雨似的。在軟體開發中,代碼和架構的改進過程,也就是重構(Refactoring)的過程,需要我們對每一條語句或語句結構、算法、架構進行逐步的改進和最佳化。其中,對於軟體架構的重構過程,往往就是套用或去除設計模式的過程。而我們應該注意的是,重構是在不改變或少量修改代碼外在行為的基礎上,對其內部結構的最佳化,以便達到代碼和架構設計更合理、更簡潔、更靈活的目的。重要的是,只有在不斷的嘗試和挫折中才能讓我們積累到更多的、有價值的軟體開發經驗。此外,我們應該注意代碼逐步改進的過程,在這個不斷嘗試的過程中,會產生多個代碼和架構的版本,只有通過對比,我們才能找出最合適的解決方案,這也是經驗積累的重要過程。
本書將結合C#程式語言、重構與設計模式,在掌握C#語言基礎知識的同時,進一步學習如何使用C#語言實現一些常用的設計模式,而重構則是不斷地進行基礎代碼與軟體架構逐步最佳化的過程,在這一過程中,我們將需要更多地理解高質量代碼的進化過程,從而可以幫助我們在使用C#語言開發軟體時,能夠更合理、更高效地創建出高質量的代碼,並使軟體架構變得更易維護、更靈活、更富有彈性。
本書特點
享受充滿樂趣的學習與開發過程。軟體開發應該是一個充滿樂趣的過程,而軟體開發的學習過程也應該是這樣。本書使用了通俗易懂的語言,結合比較有趣的示例代碼,比如大量使用了模擬創建遊戲的代碼示例,讓大家在一個比較輕鬆的氛圍中學習和套用知識點。
豐富而實用的代碼示例。本書包含了大量的示例代碼,並在其中穿插了很多實用的內容,比如隨機排序算法、中國農曆信息的獲取、樹狀結構,以及大量的設計模式模型,等等。大家可以在自己的軟體中直接使用這些代碼,也可以根據需求對其進行修改、擴展或者簡化,從而可以更有效、更合理地運用這些算法和代碼結構。
大量實用的開發技巧和方法。在討論知識點的時候,我們列舉了大量的實用開發技巧和方法,並通過實際測試來解答一些技術上的疑問,真正做到能見到樹木,亦能見到森林。
本書內容
本書主要包括以下幾個部分的內容:
C#程式語言,涵蓋了使用C#開發套用軟體過程中常用的內容,如數據類型、結構化語句、數組、結構類型、枚舉類型、類、委託、泛型、接口、多執行緒與資源同步等。並對一些不太常用的內容做了簡單的介紹,如預處理、特性、不安全代碼、分部類型和可空類型等。
設計模式,介紹了在C#和.NETFramework中套用的四種設計模式,包括訪問者、疊代器、適配器和模板方法模式。然後,我們詳細介紹了11種設計模式,它們是策略、工廠方法、抽象工廠、生成器、單件、觀察者、享元、組合、裝飾者、狀態和橋接模式,並創建了這些設計模式的基本模型,這些都是在C#開發套用軟體過程中可能會經常使用到的模式。讀者應該在學習和使用設計模式的過程中領悟到軟體開發的精髓和本質所在,而不只是照葫蘆畫瓢。讀者應該明白,套用設計模式並不是我們的目標,我們的目標是創建高質量的軟體,任何技術的取捨都應該基於這一目標。
在貫穿全書的內容中,我們穿插介紹了各種編寫高質量代碼、架構,以及逐步改進的方法、技巧,並給出了一些代碼演化的過程。
最後,我們討論了C#、設計模式、重構,以及軟體構建中涉及的一些主題,感興趣的讀者可以選擇一些主題進行深入的學習和研究,以擴展自己在軟體開發方面的知識面。
讀者類型
對於本書的讀者,你可以是:
軟體開發的初學者,可以從基礎的C#程式語言開始學習,然後,逐步學習設計模式的套用過程,以提高自己對代碼結構整體的把握能力。
從其他語言轉到C#語言的讀者,無論你是不是已經會使用VB、C++,或者Java,都可以很快地適應C#開發的便利性,並且可以通過設計模式在C#中的套用,更深入地理解C#語言的特點和軟體構建方法。
C#使用者,如果你正在使用C#語言進行軟體的開發工作,可以從本書學習到如何在C#中套用一些常見的設計模式,以便提高我們對軟體代碼的重構和最佳化能力。同時,從C#程式語言的角度,本書也可以作為參考手冊,供你隨時查詢相關的知識點。
本書的使用
如果你對C#語言和.NETFramework不太熟悉,可以從第1章開始逐章閱讀,一步步深入學習相關知識。
如果你已經對C#比較熟悉,可以直接閱讀在C#中使用設計模式的相關內容。
本書也可以作為C#語言以及設計模式的參考手冊,讀者在開發的過程中,可以隨時在本書中查詢C#語言與套用設計模式,以及了解如何改進和最佳化軟體代碼和架構。
此外,代碼與架構重構的過程介紹,穿插於不同的主題之中,方便讀者直觀地了解套用相關技術需要注意的問題,以及代碼和架構最佳化,即逐步改進的過程。
學習方法
你可以先通讀一遍。如果你的時間比較緊,至少應該先看一下目錄,了解一下本書有哪些內容,這樣,可以做到對全書的結構和內容有一個初步的了解。
然後,你可以從第1章開始,或者選擇自己感興趣的內容閱讀,但你應該充分理解每一個知識點和示例。學習軟體開發最好的方法就是實踐,讀者應該多讀代碼、多寫代碼。建議有條件的讀者可以自己輸入本書中的所有示例,並儘可能地去嘗試修改代碼,測試不同的方式帶來的運行結果上的差異。相信這么多的代碼敲下來,讀者對代碼的理解會更深入。另外,這樣做還會有一個額外的收穫,那就是你的打字速度可能會有所提高。在閱讀過程中,對於不太明白的地方,不用著急,當你系統地學習後,一些難題就會迎刃而解。
請注意,如果你對哪個知識點暫時不能理解,可以先放鬆一下,如玩玩休閒小遊戲、睡一覺,或者出去散散步,再靜下心來時,答案就很可能自然地出現在腦海里了。
最後一點,在學習的過程,手邊一定要有筆和紙,隨便寫寫、畫畫對我們的學習都會有所幫助,有時還會有意外的收穫。
交流與反饋
就像開發軟體一樣,撰寫一本書也不太可能在一開始就達到完美的境地。如果讀者發現什麼問題,或者有些什麼建議,又或者只是交流一下軟體開發的心得,都可以給我發來E-mail。
祝大家在軟體開發的過程中玩得開心!
作者
2013年1月