內容簡介
軟體架構是一系列相關的抽象模式,用於指導大型軟體系統各個方面的設計。本書就是一個關於軟體架構的堅實、可重用且易於訪問的知識庫。
本書分 4 個部分來介紹軟體架構相關的內容。其中,基礎知識部分為軟體架構打下基礎;設計架構部分關注表現層和業務層;支撐架構部分涵蓋 3 個可用於構建各種子領域的支撐架構;基礎設計部分介紹了多樣化持久化、NoSQL 數據存儲、SQL、Entity Framework 和關係型資料庫等內容。
本書著重介紹軟體架構相關的內容,非常適合軟體架構師和想成為軟體架構師的人閱讀,而且首 席開 發者和各種.NET 應用程式的開發 者也能從本書獲益。
圖書目錄
第 1 部分 基礎
第 1 章 今 天的架構師和架構...............................................................................................................2
1.1 軟體架構到底是什麼........................................................................................................................2
1.1.1 把架構原則套用到軟體中..................................................................................................3
1.1.2 確認需求.................................................................................................................................5
1.1.3 什麼是架構,什麼不是......................................................................................................8
1.1.4 架構流程...............................................................................................................................10
1.2 誰是架構師.......................................................................................................................................12
1.2.1 架構師的職責......................................................................................................................12
1.2.2 架構師的角色......................................................................................................................14
1.2.3 關於架構師的常見誤解....................................................................................................15
1.3 總結....................................................................................................................................................17
1.4 笑到**後............................................................................................................................................17
第 2 章 為成功而設計.............................................................................................................................18
2.1 “大泥球”..........................................................................................................................................18
2.1.1 “大泥球”的成因.............................................................................................................19
2.1.2 “大泥球”的徵兆................................................................................................................21
2.1.3 使用指標檢測BBM...........................................................................................................23
2.2 軟體項目的機制..............................................................................................................................24
2.2.1 企業文化...............................................................................................................................24
2.2.2 幫助團隊更好地寫代碼....................................................................................................26
2.3 走出混亂............................................................................................................................................29
2.3.1 有一種奇怪的東西叫作“遺留代碼” ............................................................................30
2.3.2 在3 招之內將殺(checkmate)......................................................................................30
2.3.3 決定是否添加人手.............................................................................................................33
2.4 總結....................................................................................................................................................34
2.5 笑到**後............................................................................................................................................35
第3 章 軟體設計的原則.......................................................................................................................36
3.1 軟體設計的通用原則......................................................................................................................36
3.1.1 從意大利麵代碼到千層餅代碼.......................................................................................37
3.1.2 關注點分離..........................................................................................................................38
3.1.3 隔離.......................................................................................................................................39
3.2 面向對象設計...................................................................................................................................39
3.2.1 相關類...................................................................................................................................40
3.2.2 對接口編程..........................................................................................................................40
3.2.3 組合與繼承..........................................................................................................................42
3.2.4 反思面向對象......................................................................................................................43
3.3 開發和設計向量..............................................................................................................................44
3.3.1 SOLID 原則.........................................................................................................................44
3.3.2 處理依賴的模式.................................................................................................................48
3.3.3 編碼向量...............................................................................................................................50
3.3.4 使用模式...............................................................................................................................52
3.4 防禦性編程.......................................................................................................................................54
3.4.1 “如果—那么—拋出”模式............................................................................................55
3.4.2 軟體契約...............................................................................................................................55
3.5 總結....................................................................................................................................................59
3.6 笑到**後............................................................................................................................................59
第 4 章 編寫優質軟體.............................................................................................................................60
4.1 編寫可測試代碼的藝術.................................................................................................................60
4.1.1 什麼是可測試性.................................................................................................................61
4.1.2 測試你的軟體......................................................................................................................62
4.1.3 軟體測試的常見實踐.........................................................................................................69
4.2 代碼可擴展性的實踐......................................................................................................................73
4.2.1 基於接口的設計.................................................................................................................74
4.2.2 外掛程式架構...............................................................................................................................74
4.2.3 狀態機...................................................................................................................................74
4.3 寫出別人看得懂的代碼.................................................................................................................74
4.3.1 把可讀性看作軟體特性....................................................................................................75
4.3.2 一些改善可讀性的實用規則............................................................................................77
4.4 總結....................................................................................................................................................79
4.5 笑到**後............................................................................................................................................79
第 2 部分 設計架構
第5 章 發現領域架構.............................................................................................................................82
5.1 領域驅動設計的真正附加價值....................................................................................................82
5.1.1 DDD 里有什麼為我所用..................................................................................................83
5.1.2 使用DDD 開展分析..........................................................................................................83
5.1.3 策略模型設計......................................................................................................................84
5.2 統一語言............................................................................................................................................85
5.2.1 統一語言的目的.................................................................................................................85
5.2.2 統一語言的結構.................................................................................................................86
5.2.3 如何定義統一語言.............................................................................................................86
5.2.4 保持語言與模型同步.........................................................................................................87
5.3 綁定上下文.......................................................................................................................................88
5.3.1 發現上下文..........................................................................................................................88
5.3.2 把領域分割成綁定上下文................................................................................................89
5.3.3 上下文映射..........................................................................................................................91
5.3.4 給予每個上下文它自己的架構.......................................................................................92
5.4 分層架構............................................................................................................................................94
5.4.1 分層架構的起源.................................................................................................................94
5.4.2 表現層...................................................................................................................................96
5.4.3 應用程式層..........................................................................................................................96
5.4.4 領域層...................................................................................................................................98
5.4.5 基礎設施層..........................................................................................................................98
5.5 總結....................................................................................................................................................98
5.6 笑到**後............................................................................................................................................99
第 6 章 表現層.......................................................................................................................................... 100
6.1 用戶體驗優先................................................................................................................................ 100
6.1.1 關注互動............................................................................................................................ 101
6.1.2 用戶體驗不是用戶界面................................................................................................. 102
6.1.3 如何創建有效的體驗...................................................................................................... 104
6.2 真實場景......................................................................................................................................... 107
6.2.1 ASP.NET 網站.................................................................................................................. 107
6.2.2 Web Forms 與ASP.NET MVC.......................................................................................111
6.2.3 給網站添加設備支持...................................................................................................... 113
6.2.4 單頁應用程式................................................................................................................... 117
6.2.5 桌面富客戶端................................................................................................................... 120
6.3 總結................................................................................................................................................. 122
6.4 笑到**後......................................................................................................................................... 122
第 7 章 神秘的業務層.......................................................................................................................... 123
7.1 用來組織業務邏輯的模式.......................................................................................................... 123
7.1.1 CRUD 童話與架構白馬王子........................................................................................ 124
7.1.2 事務腳本模式................................................................................................................... 124
7.1.3 領域模型模式................................................................................................................... 127
7.1.4 貧血領域模型(反)模式............................................................................................. 128
7.2 把焦點從數據移到任務.............................................................................................................. 129
7.2.1 ASP.NET MVC 里的任務編排...................................................................................... 130
7.2.2 在領域裡編排任務.......................................................................................................... 133
7.3 跨越邊界傳輸數據....................................................................................................................... 134
7.3.1 分層架構里的數據流...................................................................................................... 134
7.3.2 共享領域模型實體.......................................................................................................... 135
7.3.3 使用數據傳輸對象.......................................................................................................... 136
7.4 總結................................................................................................................................................. 138
7.5 笑到**後......................................................................................................................................... 138
第 3 部分 支撐架構
第8 章 領域模型導論.......................................................................................................................... 140
8.1 從數據到行為的轉變................................................................................................................... 140
8.1.1 模型和領域背後的基本原理......................................................................................... 140
8.1.2 資料庫是基礎設施.......................................................................................................... 142
8.2 領域層的內部................................................................................................................................ 143
8.2.1 領域模型............................................................................................................................ 143
8.2.2 聚合.................................................................................................................................... 145
8.2.3 領域服務............................................................................................................................ 150
8.2.4 領域事件............................................................................................................................ 152
8.2.5 橫切關注點....................................................................................................................... 155
8.3 總結................................................................................................................................................. 157
8.4 笑到**後......................................................................................................................................... 157
第 9 章 實現領域模型.......................................................................................................................... 158
9.1 線上商店示例項目....................................................................................................................... 158
9.1.1 入選的用例....................................................................................................................... 158
9.1.2 入選的方案....................................................................................................................... 159
9.1.3 “買買買”項目的結構................................................................................................... 160
9.1.4 入選的技術....................................................................................................................... 161
9.1.5 線上商店的綁定上下文................................................................................................. 162
9.1.6 “買買買”應用程式的上下文映射.............................................................................. 163
9.2 領域建模實用指南....................................................................................................................... 164
9.2.1 行為是遊戲規則的變革者............................................................................................. 164
9.2.2 實體的基架....................................................................................................................... 166
9.2.3 值對象的基架................................................................................................................... 169
9.2.4 標識聚合............................................................................................................................ 172
9.2.5 持久化模型....................................................................................................................... 179
9.3 實現業務邏輯................................................................................................................................ 182
9.3.1 查找訂單............................................................................................................................ 183
9.3.2 下訂單................................................................................................................................ 183
9.3.3 忠誠卡(或客戶忠誠計畫)......................................................................................... 187
9.4 總結................................................................................................................................................. 187
9.5 笑到**後......................................................................................................................................... 187
第 10 章 CQRS 導論............................................................................................................................ 188
10.1 分離命令與查詢......................................................................................................................... 188
10.1.1 CQRS 模式概論............................................................................................................. 189
10.1.2 CQRS 的好處................................................................................................................. 190
10.1.3 在業務層里使用CQRS................................................................................................ 191
10.1.4 CQRS 總能勝任架構需要........................................................................................... 193
10.2 查詢棧........................................................................................................................................... 194
10.2.1 讀取領域模型................................................................................................................. 194
10.2.2 設計唯讀模型外觀........................................................................................................ 196
10.2.3 分層表達式樹................................................................................................................. 198
10.3 命令棧........................................................................................................................................... 202
10.3.1 回到表現層..................................................................................................................... 203
10.3.2 規範化命令和事件........................................................................................................ 205
10.3.3 處理命令和事件............................................................................................................ 207
10.3.4 現成的存儲..................................................................................................................... 212
10.4 總結............................................................................................................................................... 214
10.5 笑到**後...................................................................................................................................... 214
第 11 章 實現CQRS............................................................................................................................ 215
11.1 CQRS 的實現.............................................................................................................................. 215
11.1.1 普通簡單的CQRS......................................................................................................... 215
11.1.2 具有命令架構的CQRS................................................................................................ 217
11.2 實現查詢棧.................................................................................................................................. 219
11.2.1 創建讀取外觀................................................................................................................. 219
11.2.2 為調用方打包數據........................................................................................................ 220
11.3 實現命令棧.................................................................................................................................. 224
11.3.1 奠定基礎.......................................................................................................................... 224
11.3.2 通過命令編排用例........................................................................................................ 227
11.4 總結............................................................................................................................................... 230
11.5 笑到**後...................................................................................................................................... 230
第 12 章 事件溯源導論....................................................................................................................... 231
12.1 事件的突破.................................................................................................................................. 231
12.1.1 下一件大事(重裝上陣)........................................................................................... 231
12.1.2 現實世界不僅有模型,還有事件.............................................................................. 232
12.1.3 拋棄“**近已知的正常狀態” .................................................................................... 232
12.1.4 事件對軟體架構的深刻影響...................................................................................... 234
12.2 事件源架構.................................................................................................................................. 236
12.2.1 持久化事件..................................................................................................................... 236
12.2.2 回放事件......................................................................................................................... 238
12.3 總結............................................................................................................................................... 240
12.4 笑到**後...................................................................................................................................... 240
第 13 章 實現事件溯源....................................................................................................................... 241
13.1 事件溯源:為何以及何時........................................................................................................ 241
13.1.1 為什麼說事件溯源是一個資源.................................................................................. 242
13.1.2 事件溯源何時合適........................................................................................................ 243
13.2 帶有回放的事件溯源................................................................................................................ 244
13.2.1 現場比分系統................................................................................................................. 244
13.2.2 系統的實現..................................................................................................................... 246
13.3 帶有聚合快照的事件溯源........................................................................................................ 255
13.3.1 迷你企業資源規劃系統............................................................................................... 256
13.3.2 系統的實現..................................................................................................................... 257
13.4 總結............................................................................................................................................... 2617
13.5 笑到**後...................................................................................................................................... 261
第 4 部分 基礎設施
第 14 章 持久層....................................................................................................................................... 264
14.1 持久層概覽.................................................................................................................................. 264
14.1.1 持久層的職責................................................................................................................. 264
14.1.2 倉儲模式的設計............................................................................................................ 265
14.2 實現倉儲...................................................................................................................................... 268
14.2.1 倉儲的查詢部分............................................................................................................ 268
14.2.2 持久化聚合..................................................................................................................... 271
14.2.3 存儲技術......................................................................................................................... 272
14.3 為何你該考慮非關係型存儲................................................................................................... 275
14.3.1 熟悉NoSQL ................................................................................................................... 276
14.3.2 你會得到什麼,又會失去什麼.................................................................................. 277
14.3.3 做出一個正確的選擇................................................................................................... 280
14.4 總結............................................................................................................................................... 282
14.5 笑到**後...................................................................................................................................... 282