包郵 框架設(shè)計(jì)指南:構(gòu)建可復(fù)用.NET庫的約定、慣例與模式(第3版)
-
>
全國計(jì)算機(jī)等級考試最新真考題庫模擬考場及詳解·二級MSOffice高級應(yīng)用
-
>
決戰(zhàn)行測5000題(言語理解與表達(dá))
-
>
軟件性能測試.分析與調(diào)優(yōu)實(shí)踐之路
-
>
第一行代碼Android
-
>
JAVA持續(xù)交付
-
>
EXCEL最強(qiáng)教科書(完全版)(全彩印刷)
-
>
深度學(xué)習(xí)
框架設(shè)計(jì)指南:構(gòu)建可復(fù)用.NET庫的約定、慣例與模式(第3版) 版權(quán)信息
- ISBN:9787121450105
- 條形碼:9787121450105 ; 978-7-121-45010-5
- 裝幀:一般膠版紙
- 冊數(shù):暫無
- 重量:暫無
- 所屬分類:>
框架設(shè)計(jì)指南:構(gòu)建可復(fù)用.NET庫的約定、慣例與模式(第3版) 本書特色
(1)從“要做”和“不要做”兩個(gè)視角彼此推翻和對抗,推演規(guī)范形成的終極思辨邏輯。 (2)針對語言構(gòu)成剖析編碼規(guī)范, 提供一種上手一門新語言快速登堂入室的新思路。 (3)被譽(yù)為C# 世界的《Effective C++》,各路大神精彩點(diǎn)評是這本書的點(diǎn)睛之筆。 (4)廣泛流傳這樣一句話:. NET程序員如一生只讀三本書,這本書必定赫然在列。
框架設(shè)計(jì)指南:構(gòu)建可復(fù)用.NET庫的約定、慣例與模式(第3版) 內(nèi)容簡介
本書從*基本的設(shè)計(jì)原則和準(zhǔn)則出發(fā),全方位介紹了設(shè)計(jì)框架的很好實(shí)踐,是微軟工程師從.NET Framework開發(fā)伊始到現(xiàn)如今的.NET這二十來年間寶貴經(jīng)驗(yàn)的總結(jié)。 與第2版發(fā)布時(shí)的2008年相比,今天的軟件開發(fā)范式用翻天覆地來形容也不為過,容器化、云服務(wù)、跨平臺、DevOps等,都對今天的軟件開發(fā)者和框架設(shè)計(jì)者提出了更高的要求。本書對第2版的內(nèi)容進(jìn)行了全面的更新,以適應(yīng)當(dāng)下發(fā)展的潮流。本書雖然是面向.NET平臺上的框架設(shè)計(jì)的,但對其他平臺的框架設(shè)計(jì)同樣具有非凡的借鑒價(jià)值。通過閱讀本書,讀者可以了解到如何設(shè)計(jì)出一個(gè)對使用者而言簡單、易用且具有一致性的優(yōu)秀框架。
框架設(shè)計(jì)指南:構(gòu)建可復(fù)用.NET庫的約定、慣例與模式(第3版) 目錄
導(dǎo)論 1
1.1 設(shè)計(jì)精良的框架的特質(zhì) 2
1.1.1 設(shè)計(jì)精良的框架是簡單的 2
1.1.2 設(shè)計(jì)精良的框架設(shè)計(jì)成本高昂 3
1.1.3 設(shè)計(jì)精良的框架充滿權(quán)衡 4
1.1.4 設(shè)計(jì)精良的框架會借鑒過往經(jīng)驗(yàn) 5
1.1.5 設(shè)計(jì)精良的框架旨在不斷發(fā)展 5
1.1.6 設(shè)計(jì)精良的框架是完整統(tǒng)一的 6
1.1.7 設(shè)計(jì)精良的框架是一致的 6
2 框架設(shè)計(jì)基礎(chǔ) 7
2.1 漸進(jìn)式框架 9
2.2 框架設(shè)計(jì)基本原則 12
2.2.1 場景驅(qū)動設(shè)計(jì)原則 12
2.2.2 低門檻原則 18
2.2.3 對象模型自文檔化原則 22
2.2.4 分層架構(gòu)原則 27
總結(jié) 29
3 命名準(zhǔn)則 30
3.1 大小寫約定 30
3.1.1 標(biāo)識符的大小寫規(guī)則 31
3.1.2 大寫首字母縮寫詞 33
3.1.3 大寫復(fù)合詞和常見術(shù)語 36
3.1.4 大小寫敏感 38
3.2 通用命名約定 38
3.2.1 詞匯選擇 39
3.2.2 使用簡寫和首字母縮寫詞 41
3.2.3 避免使用特定于編程語言的名稱 41
3.2.4 命名現(xiàn)有 API 的新版本 43
3.3 程序集、DLL 和包的命名 45
3.4 命名空間的命名 47
3.4.1 命名空間和類型名稱的沖突 48
3.5 類、結(jié)構(gòu)體和接口的命名 50
3.5.1 泛型參數(shù)的命名 52
3.5.2 通用類型的命名 52
3.5.3 枚舉的命名 53
3.6 類型成員的命名 55
3.6.1 方法的命名 55
3.6.2 屬性的命名 55
3.6.3 事件的命名 57
3.6.4 字段的命名 58
3.7 命名參數(shù) 59
3.7.1 命名運(yùn)算符重載參數(shù) 59
3.8 命名資源 60
總結(jié) 60
4 類型設(shè)計(jì)準(zhǔn)則 61
4.1 類型和命名空間 63
4.2 在類和結(jié)構(gòu)體之間選擇 66
4.3 在類和接口之間選擇 68
4.4 抽象類設(shè)計(jì) 75
4.5 靜態(tài)類設(shè)計(jì) 76
4.6 接口設(shè)計(jì) 77
4.7 結(jié)構(gòu)體設(shè)計(jì) 79
4.8 枚舉設(shè)計(jì) 83
4.8.1 設(shè)計(jì)標(biāo)記枚舉 89
4.8.2 添加枚舉值 92
4.9 嵌套類型 93
4.10 類型和程序集元數(shù)據(jù) 95
4.11 強(qiáng)類型字符串 97
總結(jié) 100
5 成員設(shè)計(jì) 101
5.1 一般成員設(shè)計(jì)準(zhǔn)則 101
5.1.1 成員重載 101
5.1.2 顯式實(shí)現(xiàn)接口成員 111
5.1.3 在屬性和方法之間選擇 114
5.2 屬性設(shè)計(jì) 119
5.2.1 索引屬性設(shè)計(jì) 120
5.2.2 屬性變更通知事件 123
5.3 構(gòu)造函數(shù)設(shè)計(jì) 124
5.3.1 類型構(gòu)造函數(shù)準(zhǔn)則 130
5.4 事件設(shè)計(jì) 132
5.5 字段設(shè)計(jì) 136
5.6 擴(kuò)展方法 139
5.7 運(yùn)算符重載 146
5.7.1 重載 operator== 149
5.7.2 轉(zhuǎn)換運(yùn)算符 149
5.7.3 比較運(yùn)算符 151
5.8 參數(shù)設(shè)計(jì) 152
5.8.1 在枚舉參數(shù)和布爾參數(shù)之間選擇 154
5.8.2 參數(shù)驗(yàn)證 156
5.8.3 參數(shù)傳遞 159
5.8.4 參數(shù)數(shù)量可變的成員 162
5.8.5 指針參數(shù) 165
5.9 在成員簽名中使用元組 166
總結(jié) 171
6 可擴(kuò)展性設(shè)計(jì) 172
6.1 可擴(kuò)展性機(jī)制 172
6.1.1 非密封類 172
6.1.2 受保護(hù)的成員 174
6.1.3 事件和回調(diào) 175
6.1.4 虛成員 180
6.1.5 抽象(抽象類和接口) 181
6.2 基類 183
6.3 密封 185
總結(jié) 187
7 異常 188
7.1 拋出異常 192
7.2 選擇拋出正確的異常類型 196
7.2.1 錯(cuò)誤消息設(shè)計(jì) 199
7.2.2 異常處理 200
7.2.3 包裝異常 205
7.3 使用標(biāo)準(zhǔn)異常類型 206
7.3.1 Exception和SystemException 206
7.3.2 ApplicationException 207
7.3.3 InvalidOperationException 207
7.3.4 ArgumentException、ArgumentNullException 和 ArgumentOutOfRangeException 207
7.3.5 NullReferenceException、IndexOutOfRangeException 和 AccessViolationException 208
7.3.6 StackOverflowException 208
7.3.7 OutOfMemoryException 209
7.3.8 ComException、SEHException和ExecutionEngineException 210
7.3.9 OperationCanceledException 和 TaskCanceledException 210
7.3.10 FormatException 210
7.3.11 PlatformNotSupportedException 211
7.4 設(shè)計(jì)自定義異常 211
7.5 異常和性能 212
7.5.1 測試者-執(zhí)行者模式 212
7.5.2 Try模式 213
總結(jié) 216
8 使用準(zhǔn)則 217
8.1 數(shù)組 217
8.2 特性 220
8.3 集合 223
8.3.1 集合參數(shù) 224
8.3.2 集合屬性和返回值 225
8.3.3 在數(shù)組和集合之間選擇 229
8.3.4 實(shí)現(xiàn)自定義集合 230
8.4 DateTime 和 DateTimeOffset 231
8.5 ICloneable 233
8.6 IComparable<T> 和 IEquatable<T> 234
8.7 IDisposable 236
8.8 Nullable<T> 236
8.9 Object 237
8.9.1 Object.Equals 237
8.9.2 Object.GetHashCode 238
8.9.3 Object.ToString 240
8.10 序列化 241
8.11 Uri 243
8.11.1 System.Uri 的實(shí)現(xiàn)準(zhǔn)則 244
8.12 System.Xml 的使用 245
8.13 相等運(yùn)算符 246
8.13.1 值類型上的相等運(yùn)算符 248
8.13.2 引用類型上的相等運(yùn)算符 248
9 通用設(shè)計(jì)模式 249
9.1 聚合組件 249
9.1.1 面向組件的設(shè)計(jì) 251
9.1.2 因子類型 253
9.1.3 聚合組件準(zhǔn)則 254
9.2 異步模式 256
9.2.1 選擇異步模式 256
9.2.2 基于任務(wù)的異步模式 258
9.2.3 異步方法的返回類型 263
9.2.4 為現(xiàn)有的同步方法制作一個(gè)異步變體 265
9.2.5 異步模式一致性的實(shí)現(xiàn)準(zhǔn)則 268
9.2.6 經(jīng)典異步模式 272
9.2.7 基于事件的異步模式 273
9.2.8 IAsyncDisposable 273
9.2.9 IAsyncEnumerable<T> 273
9.2.10 await foreach 的使用準(zhǔn)則 274
9.3 依賴屬性 276
9.3.1 依賴屬性設(shè)計(jì) 277
9.3.2 附加屬性的設(shè)計(jì) 279
9.3.3 依賴屬性校驗(yàn) 280
9.3.4 依賴屬性變更通知 280
9.3.5 依賴屬性中的值強(qiáng)制 281
9.4 Dispose 模式 282
9.4.1 基本Dispose模式 284
9.4.2 可終結(jié)類型 290
9.4.3 限定作用域的操作 293
9.4.4 IAsyncDisposable 296
9.5 工廠 299
9.6 LINQ 支持 303
9.6.1 LINQ 概覽 303
9.6.2 實(shí)現(xiàn) LINQ 支持的方法 304
9.7 可選功能模式 309
9.8 協(xié)變和逆變 312
9.8.1 逆變 315
9.8.2 協(xié)變 316
9.8.3 模擬協(xié)變模式 319
9.9 模板方法 321
9.10 超時(shí) 323
9.11 XAML 可讀類型 324
9.12 操作緩沖 326
9.12.1 數(shù)據(jù)轉(zhuǎn)換操作 338
9.12.2 向緩沖區(qū)中寫入固定大小或預(yù)定大小的數(shù)據(jù) 343
9.12.3 使用 Try-Write 模式向緩沖區(qū)中寫入數(shù)據(jù) 344
9.12.4 部分寫入緩沖區(qū)和OperationStatus 348
9.13 *后 353
附錄A C#編碼風(fēng)格約定 354
A.1 通用風(fēng)格約定 355
A.1.1 花括號的使用 355
A.1.2 空格的使用 357
A.1.3 縮進(jìn)的使用 358
A.1.4 垂直空白 360
A.1.5 成員修飾符 361
A.1.6 其他 362
A.2 命名約定 367
A.3 注釋 368
A.4 文件組織 369
附錄B 過時(shí)的準(zhǔn)則 371
B.3 命名準(zhǔn)則中的過時(shí)準(zhǔn)則 371
B.3.8 命名資源 371
B.4 類型設(shè)計(jì)準(zhǔn)則中的過時(shí)準(zhǔn)則 372
B.4.1 類型和命名空間 372
B.5 成員設(shè)計(jì)準(zhǔn)則中的過時(shí)準(zhǔn)則 374
B.5.4 事件的設(shè)計(jì) 374
B.7 異常設(shè)計(jì)準(zhǔn)則中的過時(shí)準(zhǔn)則 375
B.7.4 設(shè)計(jì)自定義異常 375
B.8 常見類型使用準(zhǔn)則中的過時(shí)準(zhǔn)則 376
B.8.10 序列化 376
B.9 通用設(shè)計(jì)模式中的過時(shí)準(zhǔn)則 383
B.9.2 異步模式 383
B.9.4 Dispose 模式 394
附錄C API規(guī)范示例 398
附錄D 不兼容變更 403
D.1 修改程序集 404
D.1.1 改變程序集的名稱() 404
D.2 添加命名空間 405
D.2.1 添加與現(xiàn)有類型沖突的命名空間() 405
D.3 修改命名空間 405
D.3.1 修改命名空間的名稱或改變大小寫() 405
D.4 移動類型 405
D.4.1 通過 [TypeForwardedTo] 移動類型() 405
D.4.2 不通過 [TypeForwardedTo] 移動類型() 406
D.5 刪除類型 406
D.5.1 刪除類型() 406
D.6 修改類型 407
D.6.1 密封一個(gè)非密封的類型() 407
D.6.2 解封一個(gè)密封類型() 407
D.6.3 改變類型名稱的大小寫() 407
D.6.4 改變類型名稱() 407
D.6.5 改變類型的命名空間() 408
D.6.6 為結(jié)構(gòu)體添加 readonly 修飾符() 408
D.6.7 從結(jié)構(gòu)體中移除 readonly 修飾符() 408
D.6.8 為現(xiàn)有接口添加基接口() 408
D.6.9 為同一個(gè)泛型接口添加第二個(gè)聲明() 409
D.6.10 將類變更為結(jié)構(gòu)體() 409
D.6.11 將結(jié)構(gòu)體變更為類() 410
D.6.12 將 struct 變更為 ref struct() 410
D.6.13 將 ref struct 變更為(非ref)struct() 410
D.7 添加成員 411
D.7.1 通過 new 修飾符掩蓋基類成員() 411
D.7.2 添加抽象成員() 411
D.7.3 為非密封類型添加成員() 411
D.7.4 為非密封類型添加覆寫成員() 412
D.7.5 為結(jié)構(gòu)體添加**個(gè)引用類型字段() 412
D.7.6 為接口添加成員() 412
D.8 移動成員 413
D.8.1 將成員移動到基類中() 413
D.8.2 將成員移動到基接口中() 413
D.8.3 將成員移動到派生類型中() 413
D.9 刪除成員 413
D.9.1 從非密封類型中刪除終結(jié)器() 413
D.9.2 從密封類型中刪除終結(jié)器() 414
D.9.3 刪除非覆寫成員() 414
D.9.4 刪除虛擬成員的override() 414
D.9.5 刪除抽象成員的override() 414
D.9.6 刪除或重命名可序列化類型的私有字段(?) 415
D.10 重載成員 415
D.10.1 為成員添加**個(gè)重載() 415
D.10.2 為引用類型參數(shù)添加可選參數(shù)重載(?) 416
D.11 更改成員簽名 416
D.11.1 重命名方法的參數(shù)() 416
D.11.2 添加或刪除方法的參數(shù)() 416
D.11.3 改變方法參數(shù)的類型() 417
D.11.4 重新排列具有不同類型的方法參數(shù)() 417
D.11.5 重新排列具有相同類型的方法參數(shù)() 417
D.11.6 改變方法的返回類型() 418
D.11.7 改變屬性的類型() 418
D.11.8 將成員的可見性從 public 變更為其他的可見性() 418
D.11.9 將成員的可見性從 protected 變更為 public() 419
D.11.10 將虛(或抽象)成員從 protected 變更為 public() 419
D.11.11 添加或刪除 static 修飾符() 419
D.11.12 改為(或不再)按引用傳遞參數(shù)() 419
D.11.13 改變按引用傳遞參數(shù)的風(fēng)格() 420
D.11.14 為結(jié)構(gòu)體的方法添加 readonly 修飾符() 420
D.11.15 從結(jié)構(gòu)體的方法中刪除 readonly 修飾符() 420
D.11.16 將必需參數(shù)變更為可選參數(shù)() 421
D.11.17 將可選參數(shù)變更為必需參數(shù)(?) 421
D.11.18 改變可選參數(shù)的默認(rèn)值() 421
D.11.19 改變常量字段的值() 421
D.11.20 將抽象成員變更為虛成員() 422
D.11.21 將虛成員變更為抽象成員() 422
D.11.22 將非虛成員變更為虛成員() 422
D.12 改變行為 423
D.12.1 將運(yùn)行時(shí)錯(cuò)誤異常變更為使用錯(cuò)誤異常() 423
D.12.2 將使用錯(cuò)誤異常變更為有用的行為() 423
D.12.3 改變方法返回值的類型(?) 423
D.12.4 拋出新的異常類型() 424
D.12.5 拋出新的異常類型,且它是從現(xiàn)有的異常類型中派生的() 424
D.13 *后 424
框架設(shè)計(jì)指南:構(gòu)建可復(fù)用.NET庫的約定、慣例與模式(第3版) 作者簡介
Krzysztof Cwalina 是微軟的軟件架構(gòu)師,是 .NET框架團(tuán)隊(duì)的初始成員之一,在職業(yè)生涯中,他成功設(shè)計(jì)了許多 .NET API。目前,他正致力于幫助微軟的不同團(tuán)隊(duì)開發(fā)不同編程語言下的可復(fù)用 API。Krzysztof 擁有愛荷華大學(xué)計(jì)算機(jī)科學(xué)專業(yè)的學(xué)士學(xué)位和碩士學(xué)位。 Jeremy Barton 是 .NET Core Libraries 團(tuán)隊(duì)的一名工程師。在使用 C# 設(shè)計(jì)和開發(fā)小型框架十幾年后,他于 2015 年加入 .NET 團(tuán)隊(duì),從事全新的 .NET Core 項(xiàng)目中密碼學(xué)相關(guān)類庫的跨平臺開發(fā)工作。Jeremy 畢業(yè)于羅斯-霍曼理工學(xué)院計(jì)算機(jī)科學(xué)和數(shù)學(xué)專業(yè)。 Brad Abrams 是微軟通用語言運(yùn)行時(shí)(Common Language Runtime,CLR)和 .NET 框架團(tuán)隊(duì)的初始成員之一。從 1998 年開始,他就一直在為 .NET 框架做設(shè)計(jì)。Brad 從構(gòu)建基類庫(BCL)開始他的框架設(shè)計(jì)生涯,而這個(gè)庫后來成為 .NET框架的核心部分。此外,他還是通用語言規(guī)范(Common Language Specification,CLS)、.NET框架設(shè)計(jì)指南和.NET框架中ECMA/ISO通用語言基礎(chǔ)架構(gòu)(Common Language Infrastructure,CLI)標(biāo)準(zhǔn)實(shí)現(xiàn)的主要作者。Brad 編寫和合著了多本出版物,包括Programming in the .NET Environment和.NET Framework Standard Library Annotated Reference的卷一和卷二。Brad 畢業(yè)于北卡羅來納州立大學(xué)計(jì)算機(jī)科學(xué)專業(yè),你可以在他的博客上了解他最近的想法。Brad現(xiàn)在是Google的集團(tuán)產(chǎn)品經(jīng)理(Group Product Manager),他正在為 Google Assistant孵化新項(xiàng)目。 譯者簡介 王橋,2016年畢業(yè)于廈門大學(xué),現(xiàn)在是微軟的軟件開發(fā)工程師。他在大學(xué)畢業(yè)后就一直深耕于 Web開發(fā)領(lǐng)域,在 TypeScript/JavaScript 和 . NET 等方面有豐富的編程實(shí)戰(zhàn)經(jīng)驗(yàn)。
- >
推拿
- >
小考拉的故事-套裝共3冊
- >
我與地壇
- >
新文學(xué)天穹兩巨星--魯迅與胡適/紅燭學(xué)術(shù)叢書(紅燭學(xué)術(shù)叢書)
- >
莉莉和章魚
- >
山海經(jīng)
- >
回憶愛瑪儂
- >
企鵝口袋書系列·偉大的思想20:論自然選擇(英漢雙語)