领域驱动设计学习手册
Vlad Khononov
徐楠,王云鹤,祁凡 译
出版时间:2023年04月
页数:312
“Vlad Khononov是一位独特的思想家,多年来一直在应用领域驱动设计来解决实际业务问题。他的想法不断推动着整个领域驱动设计社区向前发展,本书将是对领域驱动设计新手的最佳启示。”
——Nick Tune
技术咨询专家

构建软件变得比以往任何时候都更具挑战性。作为一名开发人员,你不仅需要紧跟不断变化的技术趋势,还需要了解软件背后的业务领域知识。这本学习手册为你提供了一套领域驱动设计的核心模式、原则和实践,用于分析业务领域、理解业务战略,最重要的是,使软件设计与业务需求保持一致。
本书作者向你展示了这些实践如何指导和实现健壮的业务逻辑,构建面向未来的软件设计和体系架构。你将跟随作者一起探讨领域驱动设计和其他方法之间的关系,以确保你做出满足业务需求的体系架构决策。你还将了解那些在初创公司实施领域驱动设计的真实故事。
通过本书,你将学习:
● 如何分析公司的业务领域,了解你正在构建的系统如何符合其竞争战略。
● 如何使用领域驱动设计的战略和战术工具来构建有效的软件解决方案,从而满足业务需求。
● 如何建立对你遇到的业务领域知识的共同理解。
● 如何将系统分解为限界上下文。
● 如何协调多个团队的工作。
● 如何在遗留系统改造项目中,循序渐进地引入领域驱动设计。
  1. 前言
  2. 第0章 引言
  3. 第一部分 战略设计
  4. 第1章 分析业务领域
  5. 1.1 什么是业务领域
  6. 1.2 什么是子域
  7. 1.2.1 子域的类型
  8. 1.2.2 子域对比
  9. 1.2.3 识别子域的边界
  10. 1.3 领域分析案例
  11. 1.3.1 Gigmaster
  12. 1.3.2 BusVNext
  13. 1.4 谁是领域专家
  14. 1.5 本章小结
  15. 1.6 本章练习
  16. 第2章 探索领域知识
  17. 2.1 业务问题
  18. 2.2 知识的发现
  19. 2.3 沟通
  20. 2.4 什么是通用语言
  21. 2.5 业务语言
  22. 2.5.1 场景
  23. 2.5.2 一致性
  24. 2.6 业务领域模型
  25. 2.6.1 什么是模型
  26. 2.6.2 有效的模型
  27. 2.6.3 为业务领域建模
  28. 2.6.4 持续的努力
  29. 2.6.5 工具
  30. 2.6.6 挑战
  31. 2.7 本章小结
  32. 2.8 本章练习
  33. 第3章 管理领域复杂性
  34. 3.1 不一致的模型
  35. 3.2 什么是限界上下文
  36. 3.2.1 模型边界
  37. 3.2.2 精练通用语言
  38. 3.2.3 限界上下文的范围
  39. 3.3 限界上下文与子域的对比
  40. 3.3.1 子域
  41. 3.3.2 限界上下文
  42. 3.3.3 子域与限界上下文之间的交互
  43. 3.4 边界
  44. 3.4.1 物理边界
  45. 3.4.2 所有权边界
  46. 3.5 现实生活中的限界上下文
  47. 3.5.1 语义域
  48. 3.5.2 科学
  49. 3.5.3 买一个冰箱
  50. 3.6 本章小结
  51. 3.7 本章练习
  52. 第4章 集成限界上下文
  53. 4.1 协作
  54. 4.1.1 合作
  55. 4.1.2 共享内核
  56. 4.2 客户–供应商
  57. 4.2.1 跟随者
  58. 4.2.2 防腐层
  59. 4.2.3 开放主机服务
  60. 4.3 各行其道
  61. 4.3.1 沟通问题
  62. 4.3.2 通用子域
  63. 4.3.3 模型差异
  64. 4.4 上下文映射图
  65. 4.4.1 维护
  66. 4.4.2 限制
  67. 4.5 本章小结
  68. 4.6 本章练习
  69. 第二部分 战术设计
  70. 第5章 实现简单业务逻辑
  71. 5.1 事务脚本
  72. 5.1.1 实现
  73. 5.1.2 现实并非那么简单
  74. 5.1.3 何时使用事务脚本
  75. 5.2 活动记录
  76. 5.2.1 实现
  77. 5.2.2 何时使用活动记录
  78. 5.3 让我们更务实一些
  79. 5.4 本章小结
  80. 5.5 本章练习
  81. 第6章 应对复杂业务逻辑
  82. 6.1 历史背景
  83. 6.2 领域模型
  84. 6.2.1 实现
  85. 6.2.2 构件
  86. 6.2.3 管理复杂性
  87. 6.3 本章小结
  88. 6.4 本章练习
  89. 第7章 时间维度建模
  90. 7.1 事件溯源
  91. 7.1.1 搜索
  92. 7.1.2 分析
  93. 7.1.3 事实来源
  94. 7.1.4 事件存储
  95. 7.2 事件溯源领域模型
  96. 7.2.1 优势
  97. 7.2.2 劣势
  98. 7.3 常见问题
  99. 7.3.1 性能
  100. 7.3.2 删除数据
  101. 7.3.3 为什么不能做这些……
  102. 7.4 本章小结
  103. 7.5 本章练习
  104. 第8章 架构模式
  105. 8.1 业务逻辑与架构模式
  106. 8.2 分层架构模式
  107. 8.2.1 表示层
  108. 8.2.2 业务逻辑层
  109. 8.2.3 数据访问层
  110. 8.2.4 各层之间的通信
  111. 8.2.5 分层架构的异化
  112. 8.2.6 何时使用分层架构模式
  113. 8.3 端口–适配器架构模式
  114. 8.3.1 术语
  115. 8.3.2 依赖倒置原则
  116. 8.3.3 架构组件的集成
  117. 8.3.4 端口–适配器架构的变体
  118. 8.3.5 何时使用端口–适配器架构模式
  119. 8.4 命令–查询职责分离模式
  120. 8.4.1 混合语言建模
  121. 8.4.2 CQRS模式的实现
  122. 8.4.3 投影读取模型
  123. 8.4.4 面临的挑战
  124. 8.4.5 模型分解
  125. 8.4.6 何时使用CQRS架构
  126. 8.5 本章范围
  127. 8.6 本章小结
  128. 8.7 本章练习
  129. 第9章 通信模式
  130. 9.1 模型转换
  131. 9.1.1 无状态模型转换
  132. 9.1.2 有状态模型转换
  133. 9.2 聚合的整合
  134. 9.2.1 发件箱模式
  135. 9.2.2 业务旅程
  136. 9.2.3 流程管理器
  137. 9.3 本章小结
  138. 9.4 本章练习
  139. 第三部分 领域驱动设计的应用实践
  140. 第10章 设计的启示
  141. 10.1 启示
  142. 10.2 限界上下文
  143. 10.3 业务逻辑实现模式
  144. 10.4 架构模式
  145. 10.5 测试策略
  146. 10.5.1 测试金字塔
  147. 10.5.2 测试菱形
  148. 10.5.3 反向测试金字塔
  149. 10.6 战术设计决策树
  150. 10.7 本章小结
  151. 10.8 本章练习
  152. 第11章 设计决策的演进
  153. 11.1 业务领域的变化
  154. 11.1.1 核心子域向通用子域转变
  155. 11.1.2 通用子域向核心子域转变
  156. 11.1.3 支撑子域向通用子域转变
  157. 11.1.4 支撑子域向核心子域转变
  158. 11.1.5 核心子域向支撑子域转变
  159. 11.1.6 通用子域向支撑子域转变
  160. 11.2 战略设计的顾虑
  161. 11.3 战术设计的顾虑
  162. 11.3.1 事务脚本模式向活动记录模式转变
  163. 11.3.2 活动记录模式向领域模型模式转变
  164. 11.3.3 领域模型模式向事件溯源领域模型模式转变
  165. 11.3.4 生成过去事务
  166. 11.3.5 为迁移事件建模
  167. 11.4 组织变革
  168. 11.4.1 从合作关系到客户–供应商关系
  169. 11.4.2 从客户–供应商关系到各行其道关系
  170. 11.5 领域知识
  171. 11.6 增长
  172. 11.6.1 子域
  173. 11.6.2 限界上下文
  174. 11.6.3 聚合
  175. 11.7 本章小结
  176. 11.8 本章练习
  177. 第12章 事件风暴
  178. 12.1 什么是事件风暴
  179. 12.2 谁应该参与事件风暴
  180. 12.3 需要什么来引导事件风暴
  181. 12.4 事件风暴流程
  182. 12.4.1 第一步:非结构化探索
  183. 12.4.2 第二步:时间线
  184. 12.4.3 第三步:痛点
  185. 12.4.4 第四步:关键事件
  186. 12.4.5 第五步:命令
  187. 12.4.6 第六步:策略
  188. 12.4.7 第七步:读模型
  189. 12.4.8 第八步:外部系统
  190. 12.4.9 第九步:聚合
  191. 12.4.10 第十步:限界上下文
  192. 12.5 变体
  193. 12.6 何时使用事件风暴
  194. 12.7 引导技巧
  195. 12.7.1 观察动态
  196. 12.7.2 远程事件风暴
  197. 12.8 本章小结
  198. 12.9 本章练习
  199. 第13章 真实世界中的领域驱动设计
  200. 13.1 战略分析
  201. 13.1.1 理解业务领域
  202. 13.1.2 探索当前的设计
  203. 13.2 现代化战略
  204. 13.2.1 战略现代化
  205. 13.2.2 战术现代化
  206. 13.2.3 培养通用语言
  207. 13.3 实用领域驱动设计
  208. 13.4 推销领域驱动设计
  209. 13.5 本章小结
  210. 13.6 本章练习
  211. 第四部分 与其他方法论和模式的关系
  212. 第14章 微服务
  213. 14.1 什么是服务
  214. 14.2 什么是微服务
  215. 14.2.1 方法即服务:完美的微服务
  216. 14.2.2 设计目标
  217. 14.2.3 系统复杂度
  218. 14.2.4 微服务即深度服务
  219. 14.2.5 微服务即深模块
  220. 14.3 领域驱动设计和微服务的边界
  221. 14.3.1 限界上下文
  222. 14.3.2 聚合
  223. 14.3.3 子域
  224. 14.4 压缩微服务的公共接口
  225. 14.4.1 开放主机服务
  226. 14.4.2 防腐层
  227. 14.5 本章小结
  228. 14.6 本章练习
  229. 第15章 事件驱动架构
  230. 15.1 事件驱动架构概述
  231. 15.2 事件
  232. 15.2.1 事件、命令与消息
  233. 15.2.2 事件结构
  234. 15.2.3 事件类型
  235. 15.3 设计事件驱动集成
  236. 15.3.1 分布式的大泥球
  237. 15.3.2 时域耦合
  238. 15.3.3 功能耦合
  239. 15.3.4 实现耦合
  240. 15.3.5 重构事件驱动集成
  241. 15.3.6 事件驱动设计的启示
  242. 15.4 本章小结
  243. 15.5 本章练习
  244. 第16章 数据网格
  245. 16.1 分析型数据模型与事务型数据模型
  246. 16.1.1 事实表
  247. 16.1.2 维度表
  248. 16.1.3 分析模型
  249. 16.2 分析数据管理平台
  250. 16.2.1 数据仓库
  251. 16.2.2 数据湖
  252. 16.2.3 数据仓库和数据湖架构的挑战
  253. 16.3 数据网格
  254. 16.3.1 围绕领域分解数据
  255. 16.3.2 数据即产品
  256. 16.3.3 赋能自治
  257. 16.3.4 构建生态系统
  258. 16.3.5 结合数据网格和领域驱动设计
  259. 16.4 本章小结
  260. 16.5 本章练习
  261. 第17章 结束语
  262. 17.1 问题
  263. 17.2 解决方案
  264. 17.3 实现
  265. 17.4 深入阅读
  266. 17.4.1 先进领域驱动设计
  267. 17.4.2 架构与集成模式
  268. 17.4.3 遗留系统的现代化改造
  269. 17.4.4 事件风暴
  270. 17.5 全书总结
  271. 附录A 应用领域驱动设计的案例
  272. A.1 五个限界上下文
  273. A.1.1 业务领域
  274. A.1.2 限界上下文 #1:市场营销
  275. A.1.3 限界上下文 #2:CRM
  276. A.1.4 限界上下文 #3:事件处理器
  277. A.1.5 限界上下文 #4:奖金
  278. A.1.6 限界上下文 #5:营销中心
  279. A.2 探讨
  280. A.2.1 通用语言
  281. A.2.2 子域
  282. A.2.3 限界上下文的边界
  283. A.3 总结
  284. 附录B 练习题参考答案
  285. B.1 第1章
  286. B.2 第2章
  287. B.3 第3章
  288. B.4 第4章
  289. B.5 第5章
  290. B.6 第6章
  291. B.7 第7章
  292. B.8 第8章
  293. B.9 第9章
  294. B.10 第10章
  295. B.11 第11章
  296. B.12 第12章
  297. B.13 第13章
  298. B.14 第14章
  299. B.15 第15章
  300. B.16 第16章
  301. 参考资料
书名:领域驱动设计学习手册
作者:Vlad Khononov
译者:徐楠,王云鹤,祁凡 译
国内出版社:中国电力出版社
出版时间:2023年04月
页数:312
书号:978-7-5198-7633-3
原版书书名:Learning Domain-Driven Design
原版书出版商:O'Reilly Media
Vlad Khononov
 
Vlad(Vladik)Khononov是一位拥有丰富行业经验的软件工程师。在20余年的职业生涯中,他曾在不同规模的公司担任过从网站管理员到首席架构师等各种职务。Vlad作为一名公共演说家、博客作者和作家,一直活跃在媒体上。他周游世界,咨询和讨论领域驱动设计、微服务和软件架构。Vlad帮助企业了解其业务领域,梳理遗留系统,并应对复杂架构的挑战。他和妻子以及超多的猫一起生活在以色列北部。
 
 
本书封面上的动物是白额长尾猴(学名:Cercopithecus mona)。它们在奴隶贸易时期被引入西非和加勒比群岛的热带森林中。它们习惯于在树冠的中间到顶部区域跳跃,并用长长的尾巴保持平衡。
白额长尾猴的脸、四肢和尾巴上都有较深的褐色皮毛。而它们的下半身,包括腿内侧,都是白色的。雌性的平均身长为16英寸,而雄性的平均身长为20英寸。而它们尾巴的长度则增加了26英寸或更多。白额长尾猴脸颊上的长簇毛发为黄色或灰色,它们的鼻子会带有一些浅粉色。它们的脸颊在觅食时充当食物袋,以便尽可能多地容纳食物。
白额长尾猴以水果、种子、昆虫和树叶为食,在野外的平均寿命大约为30年。它们每天都会成群结队地多次觅食。最大的有记录的猴群数量超过了40只。通常情况下,一只雄猴主导猴群,它能够与多只雌猴交配,并负责击退竞争的雄猴。猴群通常会很吵。
由于人类活动的影响,白额长尾猴的保护状态为近危。O'Reilly封面上的许多动物都濒临灭绝,所有这些对世界都很重要。
封面插图由Karen Montgomery根据Lydekker的Royal Natural History中的一幅黑白版画绘制。
购买选项
定价:98.00元
书号:978-7-5198-7633-3
出版社:中国电力出版社