《函式回響式領域建模》是2018年電子工業出版社出版的圖書,作者是(美)Debasish Ghosh(德巴斯什·戈施)。
基本介紹
- 中文名:函式回響式領域建模
- 作者:(美)Debasish Ghosh(德巴斯什·戈施)
- 出版時間:2018年1月
- 出版社:電子工業出版
- 頁數:296 頁
- ISBN:9787121323928
- 類別:數學函式概念
- 定價:79 元
- 開本:16 開
- 裝幀:平裝
內容簡介,圖書目錄,
內容簡介
傳統的分散式套用不會切入微服務、快速數據及感測器網路的回響式世界。為了捕獲這蘭乎試拒些套用的動態聯繫及依賴,我們需要使用另外一種方式來進行領域建模。
由純函式構成的領域模型是以一種更加自然的方式來反映一個回響式系統內的處理流程,同時它也直接映射到了相應的技術和模式,比如Akka、CQRS 以及事件溯源。本書講述了回響式系統中建立領域模型所需要的通用且可重用的技巧——首先介紹了函式式編程和回響式架構的相關概簽朵試婚朽喇念,然後逐步地在領域建模中引入這些新的方法,同時本悼永書提供了大量的案例,當在項目中套用這些概念時,可作為參考。
圖書目錄
1. 函式式領域建模:介紹.............................................................. 1
1.1 什麼說估愉是領域模型 .............................................................................................. 2
1.2 領域驅動設計介紹 .......................................................................................... 4
1.2.1 邊界上下文 .......................................................................................... 4
1.2.2 領域模型元素 ...................................................................................... 5
1.2.3 領域對象的生命周期 .......................................................................... 8
1.2.4 通用語言 ............................................................................................ 13
1.3 函式化思想 .................................................................................................... 14
1.3.1 汗埋頌哈,純粹的樂趣 ................................................................................ 17
1.3.2 純函式組合 ........................................................................................ 21
1.4 管理副作用 .................................................................................................... 26
1.5 純模型元素的優點 ........................................................................................ 28
1.6 回響式阿戶元習領域模型 ............................................................................................ 31
1.6.1 回響式模型的3+1 視圖 .................................................................... 31
1.6.2 揭穿“我的模型不能失敗”的神話 ................................................ 32
1.6.3 伸縮性與訊息驅動 ............................................................................ 34
1.7 事件驅動編程 ................................................................................................ 35
1.7.1 事件與命令 ........................................................................................ 37
1.7.2 領域事件 ............................................................................................ 38
1.8 函式式遇上回響式 ........................................................................................ 40
1.9 總結 ................................................................................................................ 41
2 Scala 與函式式領域模型..........................................................42
2.1 為什麼是Scala ............................................................................................... 43
2.2 靜態類型與富領域模型 ................................................................................ 45
2.3 領域行為的純函式 ........................................................................................ 47
2.3.1 回顧抽象的純粹性 ............................................................................ 50
2.3.2 引用透明的其他好處 ........................................................................ 53
2.4 代數數據類型與不變性 ................................................................................ 53
2.4.1 基礎:和類型與乘積類型 ................................................................ 53
2.4.2 模型中的ADT 結構數據 .................................................................. 56
2.4.3 ADT 與模式匹配 ............................................................................... 56
2.4.4 ADT 鼓勵不變性 ............................................................................... 58
2.5 局部用函式,全局用OO.............................................................................. 59
2.5.1 Scala 中的模組 .................................................................................. 60
2.6 用Scala 使模型具備回響性 .......................................................................... 64
2.6.1 管理作用 ............................................................................................ 65
2.6.2 管理失敗 ............................................................................................ 65
2.6.3 管理延遲 ............................................................................................ 67
2.7 總結 ................................................................................................................ 69
3 設計函式式領域模型...............................................................70
3.1 API 設計的代數 ............................................................................................. 71
3.1.1 為什麼是代數方法 ............................................................................ 72
3.2 為領域服務定義代數 .................................................................................... 72
3.2.1 賦值抽象 ............................................................................................ 73
3.2.2 組合抽象 ............................................................................................ 74
3.2.3 類型的最終代數 ................................................................................ 76
3.2.4 代數法則 ............................................................................................ 77
3.2.5 代數解釋程式 .................................................................................... 79
3.3 領域模型生命周期中的模式 ........................................................................ 80
3.3.1 工廠——對象從何處來..................................................................... 82
3.3.2 智慧型構造器 ........................................................................................ 82
3.3.3 通過更有表現力的類型進一步提升智慧型 ........................................ 84
3.3.4 用代數數據類型聚合 ........................................................................ 86
3.3.5 用透鏡更新聚合功能 ........................................................................ 88
3.3.6 倉儲與解耦的永恆藝術 .................................................................... 94
3.3.7 高效地使用生命周期模式——結論............................................... 101
3.4 總結 .............................................................................................................. 102
4 領域模型的函式式模式.......................................................... 103
4.1 模式——代數、函式、類型的聚合 ........................................................... 104
4.1.1 領域模型中的挖掘模式 .................................................................. 106
4.1.2 用函式式模式使領域模型參數化 .................................................. 107
4.2 強類型函式式編程中計算的基本模式 ...................................................... 112
4.2.1 函子——建立模式........................................................................... 112
4.2.2 加強版函子模式 .............................................................................. 114
4.2.3 單子作用——applicative 模式的變體 ............................................ 121
4.3 如何用模式對領域模型進行塑形 .............................................................. 130
4.4 用代數、類型和模式演進API ................................................................... 134
4.4.1 代數——第一稿............................................................................... 136
4.4.2 改進代數 .......................................................................................... 137
4.4.3 最終組合——採用類型................................................................... 138
4.5 用模式和類型增強領域的不變性 .............................................................. 139
4.5.1 貸款處理模型 .................................................................................. 139
4.5.2 使非法狀態不可表示 ...................................................................... 141
4.6 總結 .............................................................................................................. 142
5 領域模型的模組化................................................................ 144
5.1 將領域模型模組化 .......................................................................................... 145
5.2 模組化的領域模型——案例學習 ............................................................... 146
5.2.1 模組的解剖 ...................................................................................... 147
5.2.2 模組的構成 ...................................................................................... 154
5.2.3 模組的物理組織 .............................................................................. 155
5.2.4 模組鼓勵組合 .................................................................................. 156
5.2.5 領域模型中的模組化——結論....................................................... 157
5.3 類型類模式——模組化的多態行為 ........................................................... 157
5.4 邊界上下文的聚合模組 .............................................................................. 160
5.4.1 模組與邊界上下文 .......................................................................... 161
5.4.2 邊界上下文間的通信 ...................................................................... 162
5.5 模組化的另一個模式——free monad ......................................................... 163
5.5.1 賬戶存儲 .......................................................................................... 163
5.5.2 使它免費 .......................................................................................... 165
5.5.3 賬戶存儲——free monad ................................................................ 167
5.5.4 free monad 解釋程式 ....................................................................... 169
5.5.5 free monad——重點回顧 ................................................................ 172
5.6 總結 .............................................................................................................. 173
6 回響式模型.......................................................................... 174
6.1 回響式領域模型 .......................................................................................... 175
6.2 使用future 的非阻塞API 設計 .................................................................. 177
6.2.1 異步作為堆疊作用 .......................................................................... 178
6.2.2 基於monad 轉換器的實現 ............................................................. 181
6.2.3 用並行存取降低延遲——一種回響式模式 .................................. 183
6.2.4 使用scalaz.concurrent.Task 作為回響式構造 ................................ 187
6.3 明確的異步訊息傳遞 .................................................................................. 189
6.4 流模式 .......................................................................................................... 191
6.4.1 一個案例 .......................................................................................... 191
6.4.2 領域管道圖 ...................................................................................... 195
6.4.3 後端壓力處理 .................................................................................. 197
6.5 actor 模型 ..................................................................................................... 198
6.5.1 領域模型與actor ............................................................................. 199
6.6 總結 .............................................................................................................. 203
7 回響式流建模....................................................................... 205
7.1 回響式流模型 .............................................................................................. 206
7.2 何時使用流模型 .......................................................................................... 207
7.3 領域用例 ...................................................................................................... 208
7.4 基於流的領域互動 ...................................................................................... 208
7.5 實現:前台 .................................................................................................. 210
7.6 實現:後台 .................................................................................................. 211
7.7 流模型的主要結論 ...................................................................................... 214
7.8 使模型具有彈性 .......................................................................................... 215
7.8.1 使用Akka Streams 監管 .................................................................. 216
7.8.2 冗餘集群 .......................................................................................... 217
7.8.3 數據的持久化 .................................................................................. 217
7.9 基於流的領域模型與回響式原則 .............................................................. 219
7.10 總結 ............................................................................................................ 220
8 回響式持久化與事件溯源...................................................... 221
8.1 領域模型的持久化 ...................................................................................... 222
8.2 關注點分離 .................................................................................................. 224
8.2.1 持久化的讀/ 寫模型 ....................................................................... 225
8.2.2 命令查詢責任分離 .......................................................................... 226
8.3 事件溯源 ..................................................................................................... 228
8.3.1 事件溯源領域模型中的命令和事件 .............................................. 229
8.3.2 實現CQRS 和事件溯源 .................................................................. 231
8.4 實現事件溯源的領域模型(函式式) ........................................................ 232
8.4.1 作為頭等實體的事件 ...................................................................... 233
8.4.2 命令是事件上的free monad .......................................................... 235
8.4.3 解釋程式——隱藏所有有趣的東西............................................... 237
8.4.4 投影——讀取端模型....................................................................... 242
8.4.5 事件存儲 .......................................................................................... 243
8.4.6 分散式CQRS——一個簡訊 ........................................................... 243
8.4.7 實現的總結 ...................................................................................... 244
8.5 其他持久化模型 .......................................................................................... 245
8.5.1 將聚合作為ADT 映射到關係型表 ................................................ 245
8.5.2 運算元據(函式式) ........................................................................ 247
8.5.3 到Akka Streams 管道的回響式獲取 .............................................. 248
8.6 總結 .............................................................................................................. 249
9 測試領域模型...................................................................... 250
9.1 測試領域模型概述 .............................................................................................. 251
9.2 設計可測試的領域模型 .............................................................................. 252
9.2.1 解耦副作用 ...................................................................................... 253
9.2.2 為領域函式提供自定義解釋程式 .................................................. 254
9.2.3 實現參數化與測試 .......................................................................... 255
9.3 基於xUnit 的測試 ....................................................................................... 256
9.4 回顧模型的代數 .......................................................................................... 257
9.5 基於屬性的測試 .......................................................................................... 258
9.5.1 建模屬性 .......................................................................................... 258
9.5.2 驗證領域模型中的屬性 .................................................................. 259
9.5.3 數據生成器 ...................................................................................... 264
9.5.4 是否比基於xUnit 的測試更好 ....................................................... 266
9.6 總結 .............................................................................................................. 267
10 核心思想與原則................................................................ 268
10.1 回顧 ............................................................................................................ 268
10.2 函式式領域建模的核心原則 .................................................................... 269
10.2.1 表達式思想 .................................................................................... 269
10.2.2 早抽象, 晚賦值 ............................................................................. 270
10.2.3 使用合適的抽象 ............................................................................ 270
10.2.4 發布要做什麼,在組合器中隱藏如何做 .................................... 270
10.2.5 從實現中解耦代數 ........................................................................ 271
10.2.6 隔離邊界上下文 ............................................................................ 271
10.2.7 偏向future 而不是actor ................................................................ 271
10.3 展望未來 .................................................................................................... 272
1.3.2 純函式組合 ........................................................................................ 21
1.4 管理副作用 .................................................................................................... 26
1.5 純模型元素的優點 ........................................................................................ 28
1.6 回響式領域模型 ............................................................................................ 31
1.6.1 回響式模型的3+1 視圖 .................................................................... 31
1.6.2 揭穿“我的模型不能失敗”的神話 ................................................ 32
1.6.3 伸縮性與訊息驅動 ............................................................................ 34
1.7 事件驅動編程 ................................................................................................ 35
1.7.1 事件與命令 ........................................................................................ 37
1.7.2 領域事件 ............................................................................................ 38
1.8 函式式遇上回響式 ........................................................................................ 40
1.9 總結 ................................................................................................................ 41
2 Scala 與函式式領域模型..........................................................42
2.1 為什麼是Scala ............................................................................................... 43
2.2 靜態類型與富領域模型 ................................................................................ 45
2.3 領域行為的純函式 ........................................................................................ 47
2.3.1 回顧抽象的純粹性 ............................................................................ 50
2.3.2 引用透明的其他好處 ........................................................................ 53
2.4 代數數據類型與不變性 ................................................................................ 53
2.4.1 基礎:和類型與乘積類型 ................................................................ 53
2.4.2 模型中的ADT 結構數據 .................................................................. 56
2.4.3 ADT 與模式匹配 ............................................................................... 56
2.4.4 ADT 鼓勵不變性 ............................................................................... 58
2.5 局部用函式,全局用OO.............................................................................. 59
2.5.1 Scala 中的模組 .................................................................................. 60
2.6 用Scala 使模型具備回響性 .......................................................................... 64
2.6.1 管理作用 ............................................................................................ 65
2.6.2 管理失敗 ............................................................................................ 65
2.6.3 管理延遲 ............................................................................................ 67
2.7 總結 ................................................................................................................ 69
3 設計函式式領域模型...............................................................70
3.1 API 設計的代數 ............................................................................................. 71
3.1.1 為什麼是代數方法 ............................................................................ 72
3.2 為領域服務定義代數 .................................................................................... 72
3.2.1 賦值抽象 ............................................................................................ 73
3.2.2 組合抽象 ............................................................................................ 74
3.2.3 類型的最終代數 ................................................................................ 76
3.2.4 代數法則 ............................................................................................ 77
3.2.5 代數解釋程式 .................................................................................... 79
3.3 領域模型生命周期中的模式 ........................................................................ 80
3.3.1 工廠——對象從何處來..................................................................... 82
3.3.2 智慧型構造器 ........................................................................................ 82
3.3.3 通過更有表現力的類型進一步提升智慧型 ........................................ 84
3.3.4 用代數數據類型聚合 ........................................................................ 86
3.3.5 用透鏡更新聚合功能 ........................................................................ 88
3.3.6 倉儲與解耦的永恆藝術 .................................................................... 94
3.3.7 高效地使用生命周期模式——結論............................................... 101
3.4 總結 .............................................................................................................. 102
4 領域模型的函式式模式.......................................................... 103
4.1 模式——代數、函式、類型的聚合 ........................................................... 104
4.1.1 領域模型中的挖掘模式 .................................................................. 106
4.1.2 用函式式模式使領域模型參數化 .................................................. 107
4.2 強類型函式式編程中計算的基本模式 ...................................................... 112
4.2.1 函子——建立模式........................................................................... 112
4.2.2 加強版函子模式 .............................................................................. 114
4.2.3 單子作用——applicative 模式的變體 ............................................ 121
4.3 如何用模式對領域模型進行塑形 .............................................................. 130
4.4 用代數、類型和模式演進API ................................................................... 134
4.4.1 代數——第一稿............................................................................... 136
4.4.2 改進代數 .......................................................................................... 137
4.4.3 最終組合——採用類型................................................................... 138
4.5 用模式和類型增強領域的不變性 .............................................................. 139
4.5.1 貸款處理模型 .................................................................................. 139
4.5.2 使非法狀態不可表示 ...................................................................... 141
4.6 總結 .............................................................................................................. 142
5 領域模型的模組化................................................................ 144
5.1 將領域模型模組化 .......................................................................................... 145
5.2 模組化的領域模型——案例學習 ............................................................... 146
5.2.1 模組的解剖 ...................................................................................... 147
5.2.2 模組的構成 ...................................................................................... 154
5.2.3 模組的物理組織 .............................................................................. 155
5.2.4 模組鼓勵組合 .................................................................................. 156
5.2.5 領域模型中的模組化——結論....................................................... 157
5.3 類型類模式——模組化的多態行為 ........................................................... 157
5.4 邊界上下文的聚合模組 .............................................................................. 160
5.4.1 模組與邊界上下文 .......................................................................... 161
5.4.2 邊界上下文間的通信 ...................................................................... 162
5.5 模組化的另一個模式——free monad ......................................................... 163
5.5.1 賬戶存儲 .......................................................................................... 163
5.5.2 使它免費 .......................................................................................... 165
5.5.3 賬戶存儲——free monad ................................................................ 167
5.5.4 free monad 解釋程式 ....................................................................... 169
5.5.5 free monad——重點回顧 ................................................................ 172
5.6 總結 .............................................................................................................. 173
6 回響式模型.......................................................................... 174
6.1 回響式領域模型 .......................................................................................... 175
6.2 使用future 的非阻塞API 設計 .................................................................. 177
6.2.1 異步作為堆疊作用 .......................................................................... 178
6.2.2 基於monad 轉換器的實現 ............................................................. 181
6.2.3 用並行存取降低延遲——一種回響式模式 .................................. 183
6.2.4 使用scalaz.concurrent.Task 作為回響式構造 ................................ 187
6.3 明確的異步訊息傳遞 .................................................................................. 189
6.4 流模式 .......................................................................................................... 191
6.4.1 一個案例 .......................................................................................... 191
6.4.2 領域管道圖 ...................................................................................... 195
6.4.3 後端壓力處理 .................................................................................. 197
6.5 actor 模型 ..................................................................................................... 198
6.5.1 領域模型與actor ............................................................................. 199
6.6 總結 .............................................................................................................. 203
7 回響式流建模....................................................................... 205
7.1 回響式流模型 .............................................................................................. 206
7.2 何時使用流模型 .......................................................................................... 207
7.3 領域用例 ...................................................................................................... 208
7.4 基於流的領域互動 ...................................................................................... 208
7.5 實現:前台 .................................................................................................. 210
7.6 實現:後台 .................................................................................................. 211
7.7 流模型的主要結論 ...................................................................................... 214
7.8 使模型具有彈性 .......................................................................................... 215
7.8.1 使用Akka Streams 監管 .................................................................. 216
7.8.2 冗餘集群 .......................................................................................... 217
7.8.3 數據的持久化 .................................................................................. 217
7.9 基於流的領域模型與回響式原則 .............................................................. 219
7.10 總結 ............................................................................................................ 220
8 回響式持久化與事件溯源...................................................... 221
8.1 領域模型的持久化 ...................................................................................... 222
8.2 關注點分離 .................................................................................................. 224
8.2.1 持久化的讀/ 寫模型 ....................................................................... 225
8.2.2 命令查詢責任分離 .......................................................................... 226
8.3 事件溯源 ..................................................................................................... 228
8.3.1 事件溯源領域模型中的命令和事件 .............................................. 229
8.3.2 實現CQRS 和事件溯源 .................................................................. 231
8.4 實現事件溯源的領域模型(函式式) ........................................................ 232
8.4.1 作為頭等實體的事件 ...................................................................... 233
8.4.2 命令是事件上的free monad .......................................................... 235
8.4.3 解釋程式——隱藏所有有趣的東西............................................... 237
8.4.4 投影——讀取端模型....................................................................... 242
8.4.5 事件存儲 .......................................................................................... 243
8.4.6 分散式CQRS——一個簡訊 ........................................................... 243
8.4.7 實現的總結 ...................................................................................... 244
8.5 其他持久化模型 .......................................................................................... 245
8.5.1 將聚合作為ADT 映射到關係型表 ................................................ 245
8.5.2 運算元據(函式式) ........................................................................ 247
8.5.3 到Akka Streams 管道的回響式獲取 .............................................. 248
8.6 總結 .............................................................................................................. 249
9 測試領域模型...................................................................... 250
9.1 測試領域模型概述 .............................................................................................. 251
9.2 設計可測試的領域模型 .............................................................................. 252
9.2.1 解耦副作用 ...................................................................................... 253
9.2.2 為領域函式提供自定義解釋程式 .................................................. 254
9.2.3 實現參數化與測試 .......................................................................... 255
9.3 基於xUnit 的測試 ....................................................................................... 256
9.4 回顧模型的代數 .......................................................................................... 257
9.5 基於屬性的測試 .......................................................................................... 258
9.5.1 建模屬性 .......................................................................................... 258
9.5.2 驗證領域模型中的屬性 .................................................................. 259
9.5.3 數據生成器 ...................................................................................... 264
9.5.4 是否比基於xUnit 的測試更好 ....................................................... 266
9.6 總結 .............................................................................................................. 267
10 核心思想與原則................................................................ 268
10.1 回顧 ............................................................................................................ 268
10.2 函式式領域建模的核心原則 .................................................................... 269
10.2.1 表達式思想 .................................................................................... 269
10.2.2 早抽象, 晚賦值 ............................................................................. 270
10.2.3 使用合適的抽象 ............................................................................ 270
10.2.4 發布要做什麼,在組合器中隱藏如何做 .................................... 270
10.2.5 從實現中解耦代數 ........................................................................ 271
10.2.6 隔離邊界上下文 ............................................................................ 271
10.2.7 偏向future 而不是actor ................................................................ 271
10.3 展望未來 .................................................................................................... 272