《探索CQRS和事件源》是2014年清華大學出版社出版的圖書,作者是Dominic Betts, Julián Domínguez, Grigori Melnik, Fernando Simonazzi, Mani Subramanian。
基本介紹
- 書名:探索CQRS和事件源
- 作者:Dominic Betts、Julián Domínguez、Grigori Melnik、Fernando Simonazzi、Mani Subramanian
- 出版社:清華大學出版社
- 出版時間:2014年1月1日
- 定價:29 元
- 開本:16 開
- 裝幀:平裝
- ISBN:9787302345046
- 印次:1-1
- 印刷日期:2014年1月13日
圖書簡介,圖書目錄,
圖書簡介
本書由兩個部分構成:1,一個完整的CQRS/ES參考實現樣本。該樣本用來演示CQRS模式和事件源的相關概念;2,書面指導手冊,用來對參考實現樣本進行解說,描述樣本應用程式是如何工作、在樣本開發過程中需要做出哪些決定、需要考慮哪些折中和妥協等。本書是書面指導手冊的第一部分。本部分的內容與參考實現密切相關,章節次序安排遵從的是參考實現項目里的時間順序。其中的每一章(旅程)分別描述項目團隊在項目相關階段所關注的一個方面:領域模型的功能、基礎設施元素、系統架構和用戶界面。不過,有些方面會在好幾章裡面進行討論,這是因為項目團隊在旅程的多個階段都對這些部分進行了探討。在每一章的內容里,我們都會討論某些特定的CQRS模式和概念,解釋這些模式和概念為什麼及如何適用於特定的有界上下文設計和開發,描述這些概念和模式在特定有界上下文裡面的實現,並分析這些具體實現對系統測試的影響。
本書有些章節的討論系從大處著眼,討論一些比較抽象的原則和架構。例如,本書有一章是用來解釋為什麼要參考實現分拆為我們所選擇的幾個有界上下文;另一章則討論系統版本控制及其影響;還有一些章節研討參考實現里不同有界上下文之間是如何進行通信的。
“一次CQRS旅程”描述的是我們學習CQRS模式的心路歷程以及怎樣將學到的知識套用到參考實現的設計和開發中。需要指出的是,本書不是一個處方式的指導原則,其所展示的也不是將CQRS模式套用到參考實現中的唯一方法。通過與顧問人員進行諮詢,我們盡力將不同的觀點捕捉並表述出來,並解釋我們為什麼做出書中所描述的決定。
圖書目錄
第1章我們的領域: 會議管理系統1
1.1Contoso公司簡介1
1.2誰與我們同行2
1.3Contoso會議管理系統3
1.3.1系統概覽3
1.3.2非功能性需求4
1.4開始我們的旅程5
1.5更多信息5
第2章領域分解——站點規劃6
2.1本章術語定義6
2.2會議管理系統裡面的有界上下文7
2.2.1訂單和註冊有界上下文7
2.2.2會議管理有界上下文7
2.2.3支付有界上下文8
2.2.4不包括在內的有界上下文8
2.2.5Contoso會議管理系統的上下文路線圖9
2.3為什麼選擇這些有界上下文10
2.4更多信息11
第3章訂單和註冊有界上下文12
3.1訂單和註冊有界上下文簡介12
3.2本章術語定義13
3.3領域定義(普適語言)14
3.4訂單創建的需求分析16
3.5系統架構17探索CQRS和事件源目錄3.6模式和概念17
3.6.1系統驗證21
3.6.2交易邊界22
3.6.3並發處理22
3.6.4Aggregates和Aggregate Roots22
3.7實現細節23
3.7.1高層架構23
3.7.2寫者模型28
3.7.3使用Windows Azure服務匯流排37
3.8對測試的影響44
3.9本章小結47
3.10更多信息47
第4章擴展和改進訂單和註冊有界上下文48
4.1修改有界上下文48
4.1.1本章術語定義49
4.1.2用戶需求49
4.1.3系統架構49
4.2模式和概念51
4.2.1記錄定位器51
4.2.2讀者端查詢51
4.2.3向讀者端提供部分履行的訂單信息54
4.2.4CQRS命令驗證55
4.2.5倒計時定時器和讀者模型56
4.3實現細節56
4.3.1訂單訪問碼(記錄定位器)57
4.3.2倒計時定時器58
4.3.3使用ASP.NET MVC驗證60
4.3.4將改動推送到讀者端62
4.3.5重構SeatsAvailability aggregate66
4.4對測試的影響68
4.4.1接受測試和領域專家68
4.4.2使用SpecFlow功能來定義接受測試68
4.4.3通過測試來幫助開發人員理解訊息流75
4.5代碼理解的旅程: 痛苦、釋放和學習的故事77
4.5.1測試很重要77
4.5.2領域測試78
4.5.3硬幣的另外一面80
4.6本章小結83
4.7更多信息84
第5章準備V1發布85
5.1Contoso會議管理系統的V1發布版85
5.1.1本章術語定義85
5.1.2用戶需求86
5.1.3系統架構87
5.2模式和概念91
5.2.1事件源91
5.2.2基於任務的用戶界面92
5.2.3有界上下文之間的集成95
5.2.4分散式交易和事件源98
5.2.5自治與集權99
5.2.6讀者端的實現方法100
5.2.7最終一致性100
5.3實現細節101
5.3.1會議管理有界上下文101
5.3.2支付有界上下文102
5.3.3事件源105
5.3.4基於Windows Azure表格的事件庫111
5.3.5訂單總價計算114
5.4對測試的影響114
5.4.1時序問題114
5.4.2引入領域專家115
5.5本章小結115
5.6更多信息115
第6章系統版本控制116
6.1本章術語定義116
6.1.1用戶需求116
6.1.2系統架構117
6.2模式和概念118
6.2.1修改事件定義118
6.2.2確保訊息的自洽性119
6.2.3集成事件的保存121
6.2.4訊息排序122
6.3實現細節123
6.3.1對零成本訂單的支持123
6.3.2顯示剩餘座位數127
6.3.3刪除重複命令130
6.3.4確保訊息排序131
6.3.5保存會議管理有界上下文的事件135
6.3.6從V1版本遷移到V2版本139
6.4對測試的影響140
6.4.1重訪SpecFlow140
6.4.2在遷移過程中發現錯誤143
6.5本章小結143
6.6更多信息144
第7章加入彈性和最佳化性能145
7.1本章術語定義145
7.2系統架構145
7.3加入彈性147
7.3.1增加事件重複處理時的彈性148
7.3.2確保命令的傳送148
7.4最佳化性能148
7.4.1最佳化前的用戶界面流程149
7.4.2用戶界面最佳化150
7.4.3基礎設施最佳化151
7.5無停機遷移158
7.6實現細節159
7.6.1改進RegistrationProcessManager類160
7.6.2用戶界面流程最佳化165
7.6.3訊息的異步接收、處理和傳送170
7.6.4在流程內部對命令進行同步處理171
7.6.5使用備忘錄模式來實現快照173
7.6.6對事件進行並行發布175
7.6.7在訂購服務裡面對訊息進行過濾176
7.6.8為SeatsAvailability aggregate創建專門的SessionSubscriptionReceiver實例177
7.6.9快取讀者模型數據179
7.6.10使用多個議題來劃分服務匯流排180
7.6.11其他的最佳化和強化措施181
7.7對測試的影響184
7.7.1集成測試185
7.7.2用戶界面測試185
7.8本章小結185
7.9更多信息185
第8章尾聲: 經驗教訓186
8.1我們學到了什麼186
8.1.1性能很重要186
8.1.2實現訊息驅動並不簡單187
8.1.3雲平台的挑戰187
8.1.4不同的CQRS188
8.1.5事件源和交易日誌記錄190
8.1.6引入領域專家190
8.1.7什麼時候該使用CQRS190
8.2如果重新來過,我們會做的有什麼不同191
8.2.1以牢靠的訊息和保存基礎設施為起點191
8.2.2更好地利用基礎設施的能力191
8.2.3採納更加系統化的方法來實現流程管理器192
8.2.4對應用程式實施不同的劃分192
8.2.5以不同方式組織項目團隊192
8.2.6對領域和有界上下文的CQRS適用性進行評估192
8.2.7為性能進行規劃192
8.2.8重新考慮用戶界面193
8.2.9探索事件源的其他用處193
8.2.10探索有界上下文的集成問題193
8.3更多信息194