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