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 总结 ...............................