《函数响应式领域建模》PDF下载

  • 购买积分:11 如何计算积分?
  • 作  者:(美)德巴斯什·戈施
  • 出 版 社:北京:电子工业出版社
  • 出版年份:2018
  • ISBN:9787121323928
  • 页数:273 页
图书介绍:本书向你展示了在反应系统中的建筑领域模型的一致的、可重复的技术。本书回顾了函数式编程和反应体系的相关概念,然后系统地介绍了这种新方法的领域建模。当你阅读时,你将学习在哪里以及如何应用它,即使你的系统不是纯粹的反应性或功能性的。本书结合了理论和实践,提出了强有力的实例,你会一次又一次回到这些实例中,直到你能把这些原则应用到自己的项目中。

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