科技
类型
7.7
豆瓣评分
可以朗读
语音朗读
219千字
字数
2018-01-01
发行日期
展开全部
主编推荐语
向你介绍响应式系统中建立领域模型所需要的通用且可重用的技巧。
内容简介
传统的分布式应用不会切入微服务、快速数据及传感器网络的响应式世界。为了捕获这些应用的动态联系及依赖,我们需要使用另外一种方式来进行领域建模。由纯函数构成的领域模型是以一种更加自然的方式来反映一个响应式系统内的处理流程,同时它也直接映射到了相应的技术和模式,比如Akka、CQRS 以及事件溯源。本书讲述了响应式系统中建立领域模型所需要的通用且可重用的技巧——首先介绍了函数式编程和响应式架构的相关概念,然后逐步地在领域建模中引入这些新的方法,同时本书提供了大量的案例,当在项目中应用这些概念时,可作为参考。
目录
- 版权信息
- 内容简介
- 推荐序
- 序
- 致谢
- 关于本书
- 关于作者
- 关于译者
- 1 函数式领域建模:介绍
- 1.1 什么是领域模型
- 1.2 领域驱动设计介绍
- 1.2.1 边界上下文
- 1.2.2 领域模型元素
- 1.2.3 领域对象的生命周期
- 1.2.4 通用语言
- 1.3 函数化思想
- 1.3.1 哈,纯粹的乐趣
- 1.3.2 纯函数组合
- 1.4 管理副作用
- 1.5 纯模型元素的优点
- 1.6 响应式领域模型
- 1.6.1 响应式模型的3+1视图
- 1.6.2 揭穿“我的模型不能失败”的神话
- 1.6.3 伸缩性与消息驱动
- 1.7 事件驱动编程
- 1.7.1 事件与命令
- 1.7.2 领域事件
- 1.8 函数式遇上响应式
- 1.9 总结
- 2 Scala与函数式领域模型
- 2.1 为什么是Scala
- 2.2 静态类型与富领域模型
- 2.3 领域行为的纯函数
- 2.3.1 回顾抽象的纯粹性
- 2.3.2 引用透明的其他好处
- 2.4 代数数据类型与不变性
- 2.4.1 基础:和类型与乘积类型
- 2.4.2 模型中的ADT结构数据
- 2.4.3 ADT与模式匹配
- 2.4.4 ADT鼓励不变性
- 2.5 局部用函数,全局用OO
- 2.5.1 Scala中的模块
- 2.6 用Scala使模型具备响应性
- 2.6.1 管理作用
- 2.6.2 管理失败
- 2.6.3 管理延迟
- 2.7 总结
- 3 设计函数式领域模型
- 3.1 API设计的代数
- 3.1.1 为什么是代数方法
- 3.2 为领域服务定义代数
- 3.2.1 赋值抽象
- 3.2.2 组合抽象
- 3.2.3 类型的最终代数
- 3.2.4 代数法则
- 3.2.5 代数解释程序
- 3.3 领域模型生命周期中的模式
- 3.3.1 工厂——对象从何处来
- 3.3.2 智能构造器
- 3.3.3 通过更有表现力的类型进一步提升智能
- 3.3.4 用代数数据类型聚合
- 3.3.5 用透镜更新聚合功能
- 3.3.6 仓储与解耦的永恒艺术
- 3.3.7 高效地使用生命周期模式——结论
- 3.4 总结
- 4 领域模型的函数式模式
- 4.1 模式——代数、函数、类型的聚合
- 4.1.1 领域模型中的挖掘模式
- 4.1.2 用函数式模式使领域模型参数化
- 4.2 强类型函数式编程中计算的基本模式
- 4.2.1 函子——建立模式
- 4.2.2 加强版函子模式
- 4.2.3 单子作用——applicative模式的变体
- 4.3 如何用模式对领域模型进行塑形
- 4.4 用代数、类型和模式演进API
- 4.4.1 代数——第一稿
- 4.4.2 改进代数
- 4.4.3 最终组合——采用类型
- 4.5 用模式和类型增强领域的不变性
- 4.5.1 贷款处理模型
- 4.5.2 使非法状态不可表示
- 4.6 总结
- 5 领域模型的模块化
- 5.1 将领域模型模块化
- 5.2 模块化的领域模型——案例学习
- 5.2.1 模块的解剖
- 5.2.2 模块的构成
- 5.2.3 模块的物理组织
- 5.2.4 模块鼓励组合
- 5.2.5 领域模型中的模块化——结论
- 5.3 类型类模式——模块化的多态行为
- 5.4 边界上下文的聚合模块
- 5.4.1 模块与边界上下文
- 5.4.2 边界上下文间的通信
- 5.5 模块化的另一个模式——free monad
- 5.5.1 账户存储
- 5.5.2 使它免费
- 5.5.3 账户存储——free monad
- 5.5.4 free monad解释程序
- 5.5.5 free monad——重点回顾
- 5.6 总结
- 6 响应式模型
- 6.1 响应式领域模型
- 6.2 使用future的非阻塞API设计
- 6.2.1 异步作为堆叠作用
- 6.2.2 基于monad转换器的实现
- 6.2.3 用并行存取降低延迟——一种响应式模式
- 6.2.4 使用scalaz.concurrent.Task作为响应式构造
- 6.3 明确的异步消息传递
- 6.4 流模式
- 6.4.1 一个案例
- 6.4.2 领域管道图
- 6.4.3 后端压力处理
- 6.5 actor模型
- 6.5.1 领域模型与actor
- 6.6 总结
- 7 响应式流建模
- 7.1 响应式流模型
- 7.2 何时使用流模型
- 7.3 领域用例
- 7.4 基于流的领域交互
- 7.5 实现:前台
- 7.6 实现:后台
- 7.7 流模型的主要结论
- 7.8 使模型具有弹性
- 7.8.1 使用Akka Streams监管
- 7.8.2 冗余集群
- 7.8.3 数据的持久化
- 7.9 基于流的领域模型与响应式原则
- 7.10 总结
- 8 响应式持久化与事件溯源
- 8.1 领域模型的持久化
- 8.2 关注点分离
- 8.2.1 持久化的读/写模型
- 8.2.2 命令查询责任分离
- 8.3 事件溯源
- 8.3.1 事件溯源领域模型中的命令和事件
- 8.3.2 实现CQRS和事件溯源
- 8.4 实现事件溯源的领域模型(函数式)
- 8.4.1 作为头等实体的事件
- 8.4.2 命令是事件上的free monad
- 8.4.3 解释程序——隐藏所有有趣的东西
- 8.4.4 投影——读取端模型
- 8.4.5 事件存储
- 8.4.6 分布式CQRS——一个短信
- 8.4.7 实现的总结
- 8.5 其他持久化模型
- 8.5.1 将聚合作为ADT映射到关系型表
- 8.5.2 操作数据(函数式)
- 8.5.3 到Akka Streams管道的响应式获取
- 8.6 总结
- 9 测试领域模型
- 9.1 测试领域模型概述
- 9.2 设计可测试的领域模型
- 9.2.1 解耦副作用
- 9.2.2 为领域函数提供自定义解释程序
- 9.2.3 实现参数化与测试
- 9.3 基于xUnit 的测试
- 9.4 回顾模型的代数
- 9.5 基于属性的测试
- 9.5.1 建模属性
- 9.5.2 验证领域模型中的属性
- 9.5.3 数据生成器
- 9.5.4 是否比基于xUnit的测试更好
- 9.6 总结
- 10 核心思想与原则
- 10.1 回顾
- 10.2 函数式领域建模的核心原则
- 10.2.1 表达式思想
- 10.2.2 早抽象,晚赋值
- 10.2.3 使用合适的抽象
- 10.2.4 发布要做什么,在组合器中隐藏如何做
- 10.2.5 从实现中解耦代数
- 10.2.6 隔离边界上下文
- 10.2.7 偏向future而不是actor
- 10.3 展望未来
展开全部
出版方
电子工业出版社
电子工业出版社成立于1982年10月,是国务院独资、工信部直属的中央级科技与教育出版社,是专业的信息技术知识集成和服务提供商。经过三十多年的建设与发展,已成为一家以科技和教育出版、期刊、网络、行业支撑服务、数字出版、软件研发、软科学研究、职业培训和教育为核心业务的现代知识服务集团。出版物内容涵盖了电子信息技术的各个分支及工业技术、经济管理、科普与少儿、社科人文等领域,综合出版能力位居全国出版行业前列。