函数响应式领域建模PDF版完整免费版|百度网盘下载

编者评论:功能反应域建模 PDF

传统的分布式应用程序不会切入微服务、快速数据和传感器网络的反应式世界。为了捕获这些应用程序的动态连接和依赖关系,我们需要使用另一种方式对域进行建模。如果您想了解更多,请下载并开始学习

相关内容部分预览

简介

传统的分布式应用程序不会切入微服务、快速数据和传感器网络的反应式世界。为了捕捉这些应用程序的动态连接和依赖关系,我们需要使用另一种领域建模方法。

由纯函数组成的领域模型是反应式系统中反映处理流程的一种更自然的方式,它也直接映射到相应的技术和模式,例如 Akka、CQRS 和事件溯源。

“Functional Reactive Domain Modeling”描述了在反应式系统中构建领域模型所需的通用和可重用技能——首先介绍了函数式编程和反应式架构的概念,然后逐步将这些新方法引入到建模中,

同时,《Functional Reactive Domain Modeling》提供了大量的案例,在项目中应用这些概念时可以作为参考。

关于作者

关于译者

李源在华为技术有限公司工作8年,先后担任开发、SE、PM、PQA等职位。现任途牛网研发总经理。他已在美国质量协会 (ASQ) 注册。质量工程师(CQE);

译者具有丰富的开发、架构设计和研发管理经验。曾负责多个大型项目的方案设计和系统规划。他对 C++、Java 和设计模式有深入的研究。 Java 性能调优指南一书。

目录

功能域建模:简介 ................................................... ....................................... 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 使用 Lenses 更新聚合函数.......................... ................................................. 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< br>4.2 基本强类型函数式编程中的计算模式.......................................................... ........ 112
4.2.1 函子——构建模式...................................... .................................................. ..................... 112
4.2.2 增强函子模式................................ ………………………………………………………………………………………………………………………………………………………… 114
4.2 .3 单子动作 - 应用模式的变体 .................................... ..................... 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 帐户存储——免费的 monad ................. ..................................................... ...................... 167
5.5.4 免费的 monad 解释器...................... .................................................. 169
5.5.5 免费的 monad - 重点回顾 .................................................... .................................................................. 172
5.6 总结 ................................................... ………………………………………………………………………………………………………………………………………………………… .................................... 173
6 响应模型 .... …………………………………………………………………………………………………………………………………………………………………… ................................... 174
6.1 天e 反应域模型…………………………………………………………………………………………………… .................................. .. 175< br>6.2 使用futures 设计一个非阻塞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< br>6.5演员模型.................................................. ………………………………………………………………………………………………………………………………………… ...................... ...... 198
6.5.1 领域模型和参与者 ...... ……………………………………………………………………………………………………………………………… ...................... 199
6.6 总结 ...................... ………………………………………………………………………………………………………………………………………… ......................................................... 203
7 反应式流式建模 ...... ……………………………………………………………………………………………………………………………… .................................. 205
7.1 反应式流模型 ................... ……………………………………………………………………………………………………………………………………………………………………………………………………………… ...... ............................. 206
7.2 何时使用流模型...................................... .................................................................. ................................... 207
7.3 领域用例....................... ..................................................... .................................................. 208< br>7.4 基于流的域交互................................................................ ...................................................... ................... 208
7.5 实现:前端。 ..................................................... ………………………………………………………………………………………………………………………………………… . 210
7.6 实施:后台 ................................... …………………………………………………………………………………………………………………………………… ...... 211
7.7 流动模型的主要结论............ ………………………………………………………………………………………………………………………………………… ..................... 214
7.8 使模型具有弹性 ................................... ..................................................... ..................... 215< br>7.8.1 使用 Akka Streams 进行治理.......................... ................................................. 216
7.8.2 冗余集群 .................................................... ..................................................... ..................................... 217
7.8.3 数据的持久性..... ..................................................... ......................................... 217
7.9 基于流的域模型和反应性原则............ ………………………………………………………………………………………………………………………… ..................... 219
7.10 总结 .................................... .................................................................. ...................................... 220< br>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 命令是事件的自由单子 .. .................................................................... ...................... 235
8.4.3 解释器 - 隐藏所有有趣的东西............ ................................. 237
8.4 .4 投影 - 阅读器型号 ................... ………………………………………………………………………………………………………………………………………… ................................... 242
8.4.5 事件存储 ................... …………………………………………………………………………………………………………………………………………………… .................................................... 243
8.4.6 分布式 CQRS - 短信 ...................................... ...................... .. 243
8.4.7 实施总结 ...... ………………………………………………………………………………………………………………………………………… ...................................... 244< br>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 看好期货胜过演员 .. ................................................... ..................................... 271
10.3 展望未来 ......................................... …………………………………………………………………………………………………………………………………… ……………………272

功能反应域建模

我很惭愧地说这本书是在收集订单时买的。上周末刚翻过,我去了,挺有意思的!所以我在两个周末+一周的空闲时间读了这本书。
本书主要涉及三个方面:
*领域驱动设计
*函数式编程
*反应式设计
并以个人银行为例,将三者有机结合起来。
我的阅读速度比较慢,但是对后两个话题比较熟悉,所以很快就看完了,不过如果你不懂函数式编程(类型系统,typeclass等),这本书估计看不懂:)
如果你学过Scala,熟悉函数式编程,对类型类有一定了解,但不知道如何使用这些看似高级的functor、applicative、monad和free monads for 实用领域建设 Mo,不要犹豫,马上买一本回家,第 3、4 和 5 章会告诉你你所怀疑的一切。
如果你精通函数式编程但不了解 Akka,本书也可以作为 Akka 的介绍,第 6、7、8 章将介绍如何使用 Akka Streams 进行建模,以及如何实现 CQRS (命令查询职责分离))和事件溯源。
第 9 章以 ScalaCheck 为例,普及基于属性的测试。只用过JUnit的同学可以用它来开眼界。 《Scala 函数式编程》使用专门的章节来实现类似的测试框架。有兴趣的读者可以看看。
最后,关于翻译质量,我在阅读过程中发现了大约20+个翻译错误,比如ad-hoc polymorphism翻译成“self-organizing polymorphism”, throwed exception翻译成“thrown exception”等等,所以最好用批判的眼光来读,综合打75分。

阅读剩余
THE END