序一 I
序二 II
前言 III
導言 IV
軟件架構和設計篇 1
第1章 什麼是軟件架構 3
1.1 為什麼架構很重要? 3
1.2 架構的目標 4
1.2.1 架構風景綫(Architectural Landscape) 5
1.3 架構設計的原則 5
1.3.1 關鍵設計原則 6
1.3.2 其他資源 6
第2章 軟件架構的關鍵原則 7
2.1 概覽 7
2.2 關鍵設計原則 8
2.3 關鍵設計考量 10
2.3.1 確定應用程序類型 10
2.3.2 確定部署策略 11
2.3.3 確定閤適的技術 11
2.3.4 確定質量特性 11
2.3.5 確定橫切關注點 11
第3章 架構模式和風格 13
3.1 概覽 13
3.2 什麼是架構風格? 13
3.3 關鍵架構風格小結 14
3.3.1 組閤架構風格 14
3.4 客戶端/服務端架構風格 15
3.5 基於組件的架構風格 16
3.6 領域驅動設計架構風格 17
3.7 分層架構風格 18
3.8 消息總綫架構風格 20
3.9 N層/三層架構風格 21
3.10 麵嚮對象架構風格 21
3.11 麵嚮服務架構風格 22
3.12 其他資源 23
第4章 架構和設計的方法 25
4.1 概覽 25
4.2 輸入、輸齣和設計步驟 25
4.3 確定架構目標 26
4.3.1 範圍和時間 26
4.4 關鍵應用場景 27
4.4.1 對架構重要的用例 27
4.5 應用程序概覽 28
4.5.1 相關技術 29
4.5.2 畫齣您的架構 29
4.6 關鍵問題 30
4.6.1 質量特性 30
4.6.2 橫切關注點 30
4.6.3 用於減少問題的設計 31
4.7 候選解決方案 32
4.7.1 基準架構和候選架構 32
4.7.2 架構刺探 33
4.8 接下去做什麼 33
4.9 評審架構 33
4.9.1 基於應用場景的評估 33
4.10 展示和溝通您的架構設計 34
4.11 其他資源 35
設計基礎篇 37
第5章 分層應用程序指導原則 39
5.1 概覽 39
5.2 邏輯分層設計 39
5.2.1 錶現層、業務層和數據層 39
5.3 服務和分層 40
5.3.1 服務層 41
5.4 分層結構的設計步驟 42
步驟1:選擇您的分層策略 42
步驟2:確定您需要的分層 43
步驟3:確定如何分布層和組件 43
步驟4:確定是否需要收縮層 43
步驟5:確定層之間交互的規則 44
步驟6:找齣橫切關注點 44
步驟7:定義層之間的接口 44
步驟8:選擇您的部署策略 45
步驟9:選擇通信協議 46
第6章 錶現層指導原則 47
6.1 概覽 47
6.2 總體設計考量 48
6.3 特定設計問題 49
6.3.1 緩存 49
6.3.2 通信 50
6.3.3 組閤 50
6.3.4 異常管理 50
6.3.5 導航 51
6.3.6 用戶體驗 51
6.3.7 用戶界麵 52
6.3.8 驗證 52
6.4 技術考量 53
6.4.1 移動應用程序 53
6.4.2 富客戶端應用程序 53
6.4.3 富互聯網應用程序 53
6.4.4 Web應用程序 54
6.5 性能考量 54
6.6 錶現層設計步驟 55
6.7 相關設計模式 56
6.8 模式和實踐團隊提供的産品 57
6.9 其他資源 57
第7章 業務層指導原則 59
7.1 概覽 59
7.2 總體設計考量 60
7.3 特定設計問題 61
7.3.1 身份驗證 61
7.3.2 授權 61
7.3.3 緩存 62
7.3.4 耦閤和內聚 62
7.3.5 異常管理 63
7.3.6 日誌、審核和指示器(Instrumentation) 63
7.3.7 驗證 63
7.4 部署考量 64
7.5 業務層的設計步驟 64
7.6 相關設計模式 65
7.7 模式和實踐小組提供的産品 65
7.8 其他資源 66
第8章 數據層指導原則 67
8.1 概覽 67
8.2 總體設計考量 68
8.3 特定設計問題 69
8.3.1 批量處理 69
8.3.2 二進製大對象 70
8.3.3 連接 70
8.3.4 數據格式 70
8.3.5 異常管理 71
8.3.6 對象關係映射 71
8.3.7 查詢 72
8.3.8 存儲過程 72
8.3.9 存儲過程和動態SQL 72
8.3.10 事務 73
8.3.11 驗證 74
8.3.12 XML 74
8.4 技術考量 75
8.5 性能考量 75
8.6 安全考量 76
8.7 部署考量 76
8.8 數據層的設計步驟 76
8.9 相關設計模式 77
8.10 其他資源 78
第9章 服務層指導原則 81
9.1 概覽 81
9.2 設計考量 82
9.3 具體設計問題 83
9.3.1 身份驗證 83
9.3.2 授權 83
9.3.3 通信 84
9.3.4 異常管理 84
9.3.5 消息信道 84
9.3.6 消息構建 85
9.3.7 消息端點 85
9.3.8 消息保護 85
9.3.9 消息路由 86
9.3.10 消息轉換 86
9.3.11 服務接口 86
9.3.12 驗證 87
9.4 REST和SOAP 87
REST設計考量 88
SOAP設計考量 88
9.5 技術考量 89
9.6 部署考量 89
9.7 服務層的設計步驟 90
9.8 相關設計模式 90
9.9 其他資源 93
第10章 組件指導原則 95
10.1 概覽 95
10.2 組件設計總體指導原則 95
10.3 分層組件分布 96
10.4 錶現層組件 96
10.5 服務層組件 97
10.6 業務層組件 97
10.7 數據層組件 98
10.8 橫切組件 99
10.9 相關設計模式 99
10.10 模式和實踐團隊提供産品 100
10.11 其他資源 101
第11章 設計錶現組件 103
11.1 概覽 103
11.2 第一步:理解UI需求 103
11.3 第二步:確定需要的UI類型 104
11.4 第三步:選擇UI技術 104
11.5 第四步:設計錶現組件 106
11.5.1 用戶界麵組件 106
11.5.2 錶現邏輯組件 107
11.5.3 錶現模型組件 107
11.5.4 錶現實體 108
11.6 第五步:確定綁定需求 109
11.7 第六步:確定錯誤處理策略 110
11.8 第七步:確定驗證策略 111
11.9 模式和實踐小組提供的産品 111
11.10 其他資源 112
第12章 設計業務組件 113
12.1 概覽 113
12.2 第一步:確定您的應用程序將會使用的業務組件 113
12.3 第二步:為業務組件進行關鍵決策 114
12.4 第三步:選擇閤適的事務支持 114
12.5 第四步:確定如何處理業務規則 115
12.6 第五步:確定滿足需求的模式 116
12.7 其他資源 117
第13章 設計業務實體 119
13.1 概覽 119
13.2 第一步:選擇錶現方式 119
13.3 第二步:為業務實體選擇設計 120
13.4 第三步:確定序列化支持 120
13.5 領域驅動設計 121
13.6 其他資源 122
第14章 設計業務工作流 123
14.1 概覽 123
14.2 第一步:根據應用場景確定工作流風格 123
14.3 第二步:選擇編寫模式 124
14.4 第三步:確定如何處理規則 124
14.5 第四步:選擇工作流解決方案 124
14.6 第五步:設計業務組件來支持工作流 125
14.6.1 Windows Workflow Foundation 125
14.6.2 BizTalk服務器 126
14.6.3 帶ESB的BizTalk 126
14.6.4 結閤使用Windows Workflow Foundation和BizTalk 127
14.7 其他資源 128
第15章 設計數據組件 129
15.1 概覽 129
15.2 第一步:選擇數據訪問技術 129
15.3 第二步:選擇如何從數據源獲取和持久化業務對象 130
15.4 第三步:確定如何連接數據源 130
15.4.1 連接 130
15.4.2 連接池 131
15.4.3 事務和並發 132
15.5 第四步:確定處理數據源錯誤的策略 133
15.5.1 異常 133
15.5.2 重試邏輯 133
15.5.3 超時 134
15.6 第五步:設計服務代理組件(可選) 134
15.7 其他資源 134
第16章 質量特性 135
16.1 概覽 135
16.2 常見質量特性 135
16.2.1 可用性 137
16.2.2 概念完整性 137
16.2.3 互操作性 138
16.2.4 可維護性 138
16.2.5 可管理性 139
16.2.6 性能 139
16.2.7 可靠性 140
16.2.8 可重用性 140
16.2.9 可伸縮性 141
16.2.10 安全性 141
16.2.11 可支持性 142
16.2.12 可測試性 142
16.2.13 用戶體驗/易用性 143
16.3 其他資源 143
第17章 橫切關注點 145
17.1 概覽 145
17.2 總體設計考量 145
17.3 具體設計問題 146
17.3.1 身份驗證 146
17.3.2 授權 147
17.3.3 緩存 147
17.3.4 通信 148
17.3.5 配置管理 148
17.3.6 異常管理 149
17.3.7 日誌和指示器 149
17.3.8 狀態管理 150
17.3.9 驗證 150
17.4 緩存的設計步驟 151
17.4.1 第一步:確定要緩存的數據 151
17.4.2 第二步:確定數據緩存在哪裏 151
17.4.3 第三步:確定緩存數據的格式 152
17.4.4 第四步:確定閤適的緩存管理策略 152
17.4.5 第五步:確定如何加載緩存數據 153
17.5 異常管理的設計步驟 154
17.5.1 第一步:確定需要處理的異常 154
17.5.2 第二步:確定您的異常檢測策略 154
17.5.3 第三步:確定異常的傳播策略 154
17.5.4 第四步:確定您自定義異常的策略 155
17.5.5 第五步:確定需要收集的信息 155
17.5.6 第六步:確定異常日誌記錄策略 156
17.5.7 第七步:確定您的異常通知策略 156
17.5.8 第八步:確定如何處理未處理異常 156
17.6 驗證輸入和驗證數據的設計步驟 157
17.6.1 第一步:確定信任邊界 157
17.6.2 第二步:確定關鍵應用場景 157
17.6.3 第三步:確定哪裏需要驗證 157
17.6.4 第四步:確定驗證策略 158
17.7 相關設計模式 158
17.8 模式和實踐團隊的解決方案産品 158
17.9 其他資源 159
第18章 通信和消息 161
18.1 概覽 161
18.2 總體設計指導原則 161
18.3 基於消息通信的指導原則 162
18.3.1 異步和同步通信 163
18.3.2 耦閤和內聚 163
18.3.3 數據格式 163
18.3.4 互操作性 164
18.3.5 性能 165
18.3.6 狀態管理 165
18.4 契約先行設計 165
18.5 安全考量 166
18.5.1 傳輸安全 166
18.5.2 消息安全 167
18.6 技術選項 167
18.6.1 WCF技術選項 167
18.6.2 ASMX技術選項 168
18.7 其他資源 168
第19章 物理層和部署 169
19.1 概覽 169
19.2 分布式和非分布式部署 169
19.2.1 非分布式部署 169
19.2.2 分布式部署 170
19.2.3 分布式環境的性能和設計考量 170
19.2.4 針對分布式部署中定位組件的一些建議 171
19.3 分布式部署模式 172
19.3.1 客戶端/服務端部署 172
19.3.2 N層部署 172
19.3.3 兩層部署 172
19.3.4 三層部署 173
19.3.5 四層部署 173
19.3.6 Web應用程序部署 173
19.3.7 富互聯網應用程序部署 174
19.3.8 富客戶端應用程序部署 174
19.4 性能模式 174
19.4.1 負載均衡集群 175
19.4.2 親和性和會話技術 175
19.4.3 應用農場 176
19.5 可靠性模式 176
19.5.1 故障轉移集群 176
19.6 安全性模式 177
19.6.1 模擬和委派 177
19.6.2 信任子係統 178
19.6.3 多重信任服務標識 178
19.7 縱嚮擴展和橫嚮擴展 179
19.7.1 縱嚮擴展的考量 179
19.7.2 設計以支持橫嚮擴展 179
19.7.3 設計的牽製和權衡 180
19.8 網絡基礎結構的安全考量 181
19.9 可管理性考量 182
19.10 相關設計模式 182
19.11 其他資源 183
應用程序原型篇 185
第20章 選擇應用程序類型 187
20.1 概述 187
20.2 應用程序原型小結 187
20.2.1 應用程序類型優缺點 188
20.3 移動應用程序 189
20.4 富客戶端應用程序類型 190
20.5 富Internet程序 191
20.6 服務應用程序類型 192
20.8 Web應用程序類型 193
第21章 設計Web應用程序 195
21.1 概述 195
21.2 通用設計考量 196
21.3 特定的設計考量 196
21.3.1 應用程序提交過程 197
21.3.2 身份驗證 198
21.3.3 授權 198
21.3.4 緩存 198
21.3.5 異常管理 199
21.3.6 日誌和規範 199
21.3.7 導航 199
21.3.8 頁麵布局 200
21.3.9 頁麵渲染 200
21.3.10 Session管理 201
21.3.11 驗證 201
21.4 層設計中的考量 202
21.4.1 錶現層 202
21.4.2 業務層 202
21.4.3 數據層 202
21.4.4 服務層 202
21.5 測試以及可測試性的考量 203
21.6 技術考量 203
21.7 部署考量 204
21.7.1 非分布式部署 204
21.7.2 分布式部署 204
21.7.3 負載均衡 205
21.8 相關的設計模式 206
21.9 其他資源 207
第22章 設計富客戶端應用程序 209
22.1 概述 209
22.2 通用設計考量 210
22.3 特定的設計考量 211
22.3.1 業務層 211
22.3.2 通信 211
22.3.3 組閤 212
22.3.4 配置管理 213
22.3.5 數據訪問 213
22.3.6 異常管理 214
22.3.7 可維護性 214
22.3.8 錶現層 215
22.3.9 狀態管理 215
22.3.10 工作流 216
22.4 安全考量 216
22.5 數據處理考量 217
22.5.1 緩存數據 217
22.5.2 數據並發 218
22.5.3 數據綁定 218
22.6 離綫/偶爾連綫情況的設計考量 218
22.7 技術考量 219
22.8 部署考量 220
22.8.1 獨立部署 220
22.8.2 客戶端/服務器端部署 220
22.8.3 N層部署 220
22.8.4 部署技術 221
22.9 相關的設計模式 221
22.10 其他資源 223
第23章 設計富Internet應用程序 225
23.1 概述 225
23.2 通用設計考量 226
23.3 特定的設計考量 227
23.1.1 業務層 228
23.1.2 緩存 228
23.1.3 通信 229
23.1.4 組閤 229
23.1.5 數據訪問 230
23.1.6 異常管理 230
23.1.7 日誌 230
23.1.8 媒體和圖形 231
23.1.9 可移動性 231
23.1.10 可移植性 232
23.1.11 錶現層 232
23.1.12 狀態管理 232
23.1.13 驗證 233
23.4 安全考量 233
23.5 數據處理考量 234
23.6 技術考量 234
23.7 部署考量 236
23.7.1 RIA插件安裝 236
23.7.2 分布式部署 236
23.7.3 負載均衡 237
23.7.4 Web場的優缺點 238
23.8 相關的設計模式 238
23.9 其他資源 239
第24章 設計移動應用程序 241
24.1 概述 241
24.2 通用設計考量 242
24.3 一些特定的設計考量 243
24.3.1 身份驗證和授權 243
24.3.2 緩存 244
24.3.3 通信 244
24.3.4 配置管理 245
24.3.5 數據訪問 245
24.3.6 設備相關 246
24.3.7 異常管理 246
24.3.8 日誌 247
24.3.9 移植應用程序 247
24.3.10 功耗管理 248
24.3.11 同步 248
24.3.12 測試 249
24.3.14 用戶界麵 249
24.3.15 驗證 250
24.4 技術考量 250
24.4.1 Microsoft Silverlight for Mobile 250
24.4.2 .NET Compact Framework 251
24.4.3 Windows Mobile 251
24.4.4 Windows Embedded 252
24.5 部署考量 252
24.6 相關設計模式 253
24.7 其他資源 254
第25章 設計服務應用程序 255
25.1 概述 255
25.2 通用設計考量 256
25.3 特定的設計考量 257
25.3.1 身份驗證 258
25.3.2 授權 258
25.3.3 業務層 258
25.3.4 通信 259
25.3.5 數據層 259
25.3.6 異常管理 260
25.3.7 消息結構 260
25.3.8 消息端點 260
25.3.9 消息保護 261
25.3.10 消息轉換 261
25.3.11 消息交換模式 262
25.3.12 錶述性狀態傳輸 262
25.3.13 服務層 263
25.3.14 SOAP 264
25.3.15 驗證 264
25.4 技術考量 265
25.5 部署考量 265
25.6 相關設計模式 266
25.7 其他資源 268
第26章 設計托管和雲服務 269
26.1 概述 269
26.1.1 雲計算 269
26.1.2 托管和雲服務的通用詞匯 270
26.2 雲端應用程序的好處 271
26.2.1 針對ISV和服務托管的好處 271
26.2.3 針對消費服務企業的好處 272
26.3 設計考量 272
26.3.1 數據隔離和共享 272
26.3.2 數據安全 274
26.3.3 數據的存儲和擴展 275
26.3.4 標識管理 277
26.3.5 多重租賃 278
26.3.6 內部托管還是外部托管,構建還是購買 279
26.3.7 性能 280
26.3.8 服務組閤 280
26.3.9 服務集成 282
26.3.10 服務管理 283
26.4 相關設計模式 284
26.5 其他資源 285
第27章 設計Office業務應用程序 287
27.1 概述 287
27.1.1 構成Office業務應用程序的組件 288
27.2 Office業務應用程序的關鍵場景 288
27.2.1 企業內容管理 289
27.2.2 商業智能 289
27.2.3 統一消息 290
27.3 通用的OBA模式 290
27.3.1 擴展的到達通道 290
27.3.2 文檔整閤 291
27.3.3 文檔工作流 293
27.3.4 組閤用戶界麵 293
27.3.5 數據閤並(導航發現) 294
27.3.6 協作 296
27.3.7 通知和任務 296
27.4 通用設計考量 297
27.5 安全考量 298
27.6 部署考量 298
27.7 相關設計模式 298
27.8 其他資源 299
第28章 設計SharePoint LOB應用程序 301
28.1 概述 301
28.1.1 SharePoint LOB應用程序的邏輯層 302
28.1.2 物理層部署 302
28.2 關鍵場景和特性 303
28.3 通用設計考量 303
28.4 特定的設計考量 304
28.4.1 業務數據目錄 304
28.4.2 文檔和內容存儲 305
28.4.3 Excel服務 305
28.4.4 InfoPath 錶單服務 306
28.4.5 SharePoint對象模型 306
28.4.6 Web Parts 307
28.4.7 工作流 307
28.5 技術考量 308
28.6 部署考量 308
28.7 相關設計模式 308
28.8 其他資源 309
應用程序原型篇 312
附錄A 微軟應用程序平颱 313
A.1 概述 313
A.2 相關的信息和資源 314
A.2.1 微軟是怎樣在Web上組織技術信息的 314
A.2.2 Microsoft Developer Network 314
A.2.3 Microsoft TechNet 315
A.3 .NET框架 315
A.4 公共語言運行時 315
A.5 數據訪問 315
A.6 移動應用程序 316
A.7 富客戶端 317
A.8 富Internet應用程序 317
A.9 服務 318
A.10 工作流 318
A.11 Web應用程序 319
A.12 Web服務器——Internet信息服務 319
A.13 數據庫服務器——SQL Server 320
A.14 Visual Studio開發環境 320
A.15 其他的工具和庫 320
A.15.1 Patterns & practices解決方案 320
A.16 其他資源 321
附錄B 錶現方麵的技術矩陣 323
B.1 概述 323
B.2 錶現層技術小結 323
B.2.1 移動應用程序 323
B.2.2 富客戶端應用程序 323
B.2.3 富Internet應用程序 324
B.2.4 Web應用程序 324
B.3 優缺點矩陣 325
B.3.1 移動應用程序 325
B.3.2 富客戶端應用程序 326
B.3.3 富Internet應用程序 326
B.3.4 Web應用程序 327
B.4 通用的場景和解決方案 328
B.4.1 移動應用程序 328
B.4.2 富客戶端應用程序 328
B.4.3 富Internet應用程序 329
B.4.4 Web應用程序 329
B.5 其他資源 330
附錄C 數據訪問的技術矩陣 331
C.1 概述 331
C.2 數據訪問技術小結 331
C.3 優缺點矩陣 332
C.3.1 對象-關係數據訪問 332
C.3.2 斷綫和離綫場景 333
C.3.3 SOA/服務場景 333
C.3.4 N層以及通用場景 333
C.4 通用建議 335
C.5 通用的場景和解決方案 335
C.6 LINQ to SQL的缺點 336
C.7 移動解決方案的缺點 337
C.8 其他資源 337
附錄D 整閤方麵的技術矩陣 339
D.1 概述 339
D.2 整閤技術小結 339
D.3 優缺點矩陣 339
D.4 通用的場景和解決方案 341
D.5 其他資源 342
附錄E 工作流方麵的技術矩陣 343
E.1 概述 343
E.2 整閤技術小結 343
E.3 人力工作流VS係統工作流 344
E.4 優缺點矩陣 344
E.5 通用的場景和解決方案 345
E.6 其他資源 345
附錄F patterns & practices企業庫 347
F.1 概述 347
F.2 企業庫的目標 347
F.3 企業庫的內容 347
F.3.1 應用程序塊 348
F.4 緩存應用程序塊(Caching Application Block) 349
F.4.1 關鍵場景 349
F.4.2 何時使用 349
F.4.3 缺點 350
F.5 加密應用程序塊(Cryptography Application Block) 350
F.5.1 關鍵場景 350
F.5.2 何時使用 350
F.5.3 缺點 351
F.6 數據訪問應用程序塊(Data Access Application Block) 351
F.6.1 關鍵場景 351
F.6.2 何時使用 351
F.6.3 缺點 352
F.7 異常處理應用程序塊(Exception Handling Application Block) 352
F.7.1 關鍵場景 352
F.7.2 何時使用 352
F.8 日誌應用程序塊(Logging Application Block) 353
F.8.1 關鍵場景 353
F.8.2 何時使用 353
F.8.3 缺點 353
F.9 策略注入應用程序塊(Policy Injection Application Block) 353
F.9.1 關鍵場景 354
F.9.2 何時使用 354
F.9.3 缺點 354
F.10 安全應用程序塊(Security Application Block) 354
F.10.1 關鍵場景 355
F.10.2 何時使用 355
F.10.3 缺點 355
F.11 Unity應用程序塊(Unity Application Block) 355
F.11.1 關鍵場景 355
F.11.2 何時使用 356
F.11.3 缺點 356
F.12 驗證應用程序塊(Validation Application Block) 356
F.12.1 關鍵場景 356
F.12.2 何時使用 356
F.12.3 缺點 357
F.13 其他資源 357
附錄G 模式與實踐團隊模式目錄 359
G.1 關於WPF和Silverlight的組閤應用程序指南 359
G.2 數據遷移模式 360
G.3 企業解決方案中的模式 361
G.4 整閤模式 363
G.5 Web服務安全模式 364
G.6 其他資源 365
索引 367
· · · · · · (
收起)