作者 |
Vaughn Vernon(沃恩.弗农) |
丛书名 |
出版社 |
电子工业出版社 |
ISBN |
9787121224485 |
简要 |
简介 |
内容简介 本书分别从战略和战术层面详尽地讨论了如何实现DDD,其中包含了大量的最佳实践、设计准则和对一些问题的折中性讨论。全书共分为14章,在DDD战略部分,本书向我们讲解了领域、限界上下文、上下文映射图和架构等内容,战术部分包括实体、值对象、领域服务、领域事件、聚合和资源库等内容。一个虚构的案例研究贯穿全书,这对于实例讲解DDD实现来说非常有用。 |
目录 |
序 ....................................................................................... xix 前言 ................................................................................... xxi 致谢 ................................................................................. xxxi 关于作者 ......................................................................... xxxv 如何使用本书..................................................................xxxvii 第1章 DDD入门 ....................................................................1 我能DDD吗? ....................................................................................2 为什么我们需要DDD .........................................................................5 如何DDD .......................................................................................... 17 使用DDD的业务价值 .......................................................................22 1.你获得了一个非常有用的领域模型 ......................................22 2.你的业务得到了更准确的定义和理解 ..................................23 3.领域专家可以为软件设计做出贡献 ......................................23 4.更好的用户体验 .....................................................................23 5.清晰的模型边界 ....................................................................24 6.更好的企业架构 ....................................................................24 7.敏捷、迭代式和持续建模 ......................................................24 8.使用战略和战术新工具 .........................................................24 实施DDD所面临的挑战...................................................................25 虚构的案例,真实的实践 ................................................................. 33 本章小结 ...........................................................................................36 第2章 领域、子域和限界上下文 ............................................37 总览 ................................................................................................... 37 工作中的子域和限界上下文 ..................................................... 38 将关注点放在核心域上 ........................................................... 42 战略设计为什么重要 ....................................................................... 45 现实世界中领域和子域 ....................................................................48 x 理解限界上下文 ................................................................................ 53 限界上下文不仅仅只包含模型 ................................................. 57 限界上下文的大小 .................................................................... 59 与技术组件保持一致 ............................................................... 61 示例上下文........................................................................................ 62 协作上下文 ................................................................................63 身份与访问上下文 ....................................................................69 敏捷项目管理上下文 ................................................................ 71 本章小结 ...........................................................................................73 第3章 上下文映射图 ............................................................75 上下文映射图为什么重要 ................................................................ 75 绘制上下文映射图 ....................................................................77 产品和组织关系 .......................................................................79 映射3个示例限界上下文 ..........................................................82 本章小结 ...........................................................................................97 第4章 架构 .........................................................................99 采访一个成功的CIO....................................................................... 100 分层 ................................................................................................. 104 依赖倒置原则 ......................................................................... 107 六边形架构(端口与适配器) ........................................................ 110 面向服务架构 ..................................................................................114 REST ................................................................................................117 REST作为一种架构风格 .........................................................117 RESTful HTTP服务器的关键方面 ........................................ 118 RESTful HTTP客户端的关键方面 ........................................ 119 REST和DDD .......................................................................... 120 为什么是REST? ................................................................... 121 命令和查询职责分离——CQRS.................................................... 121 CQRS的各个方面 ................................................................... 123 处理具有最终一致性的查询模型 ......................................... 128 事件驱动架构 ................................................................................. 129 xi 管道和过滤器 ......................................................................... 131 长时处理过程(也叫Saga) ................................................... 134 事件源 ..................................................................................... 140 数据网织和基于网格的分布式计算 .............................................. 143 数据复制 ................................................................................. 144 事件驱动网织和领域事件 ..................................................... 145 持续查询 ................................................................................. 145 分布式处理 ............................................................................. 146 本章小结 ......................................................................................... 148 第5章 实体 ........................................................................ 149 为什么使用实体 .............................................................................. 149 唯一标识 ......................................................................................... 151 用户提供唯一标识 ................................................................. 152 应用程序生成唯一标识 ......................................................... 153 持久化机制生成唯一标识 ...................................................... 156 另一个限界上下文提供唯一标识 .......................................... 160 标识生成时间 ......................................................................... 161 委派标识 ................................................................................. 163 标识稳定性 ............................................................................. 165 发现实体及其本质特征 .................................................................. 167 揭开实体及其本质特征的神秘面纱 ...................................... 168 挖掘实体的关键行为 ............................................................. 172 角色和职责 ............................................................................. 176 创建实体 ................................................................................. 181 验证 ......................................................................................... 183 跟踪变化 ................................................................................. 192 本章小结 ......................................................................................... 192 第6章 值对象 .................................................................... 193 值对象的特征 ................................................................................. 194 度量或描述 ............................................................................. 195 不变性 ..................................................................................... 195 xii 概念整体 ................................................................................. 196 可替换性 ................................................................................. 199 值对象相等性 .........................................................................200 无副作用行为 ......................................................................... 201 最小化集成 .....................................................................................204 用值对象表示标准类型 .................................................................206 测试值对象 ..................................................................................... 210 实现 ................................................................................................. 214 持久化值对象 ................................................................................. 219 拒绝由数据建模泄漏带来的不利影响 ..................................220 ORM与单个值对象 ................................................................ 221 多个值对象序列化到单个列中 ..............................................224 使用数据库实体保存多个值对象 ..........................................225 使用联合表保存多个值对象 .................................................229 ORM与枚举状态对象 ............................................................230 本章小结 ......................................................................................... 233 第7章 领域服务 ................................................................235 什么是领域服务(首先,什么不是领域服务) .............................. 237 请确定你是否需要一个领域服务 .................................................. 238 建模领域服务 ................................................................................. 241 独立接口有必要吗 ..................................................................244 一个计算过程 .........................................................................246 转换服务 .................................................................................249 为领域服务创建一个迷你层 .................................................250 测试领域服务 .................................................................................250 本章小结 ......................................................................................... 253 第8章 领域事件 ................................................................255 何时/为什么使用领域事件 ............................................................. 255 建模领域事件 ................................................................................. 258 创建具有聚合特征的领域事件 ............................................. 263 身份标识 .................................................................................264 xiii 从领域模型中发布领域事件 .......................................................... 265 发送方 ..................................................................................... 265 订阅方 .....................................................................................269 向远程限界上下文发布领域事件 .................................................. 271 消息设施的一致性 ................................................................. 271 自治服务和系统 ...................................................................... 272 容许时延 ................................................................................. 273 事件存储 ......................................................................................... 274 转发存储事件的架构风格 .............................................................. 279 以REST资源的方式发布事件通知 ........................................ 279 通过消息中间件发布事件通知 .............................................. 283 实现 .................................................................................................284 发布NotificationLog ............................................................... 285 发布基于消息的事件通知 ......................................................290 本章小结 .........................................................................................297 第9章 模块 .......................................................................299 通过模块完成设计 .........................................................................299 模块的基本命名规范 .....................................................................302 领域模型的命名规范 .....................................................................302 敏捷项目管理上下文中的模块 ......................................................305 其他层中的模块 .............................................................................308 先考虑模块,再是限界上下文 ........................................................309 本章小结 ......................................................................................... 310 第10章 聚合 ...................................................................... 311 在Scrum核心领域中使用聚合 ....................................................... 312 第一次尝试:臃肿的聚合 ....................................................... 313 第二次尝试:多个聚合 ........................................................... 314 原则:在一致性边界之内建模真正的不变条件 .............................317 原则:设计小聚合 ........................................................................... 319 不要相信每一个用例 ............................................................. 321 原则:通过唯一标识引用其他聚合 ............................................... 322 xiv 通过标识引用使多个聚合协同工作 ...................................... 324 建模对象导航性 ..................................................................... 325 可伸缩性和分布式 ................................................................. 326 原则:在边界之外使用最终一致性 ............................................... 327 谁的任务? ............................................................................. 328 打破原则的理由 ............................................................................. 329 理由之一:方便用户界面 ........................................................ 329 理由之二:缺乏技术机制 ....................................................... 330 理由之三:全局事务 ............................................................... 331 理由之四:查询性能 ............................................................... 331 遵循原则 ................................................................................. 332 通过发现,深入理解 ...................................................................... 332 重新思考设计 ......................................................................... 332 估算聚合成本 ......................................................................... 334 常见用例场景 ......................................................................... 335 内存消耗 ................................................................................. 336 探索另外的设计 ..................................................................... 337 实现最终一致性 ..................................................................... 338 这是Scrum团队成员的任务吗? ........................................... 339 决定的时候到了 ..................................................................... 341 实现 ................................................................................................. 341 创建具有唯一标识的根实体.................................................. 342 优先使用值对象 ..................................................................... 343 使用迪米特法则和“告诉而非询问”原则 .............................344 乐观并发 .................................................................................346 避免依赖注入 .........................................................................348 本章小结 ......................................................................................... 349 第11章 工厂 ...................................................................... 351 领域模型中的工厂 ......................................................................... 351 聚合根中的工厂方法 ...................................................................... 352 创建CalendarEntry实例 ......................................................... 353 创建Discussion实例 ............................................................... 357 xv 领域服务中的工厂 ......................................................................... 358 本章小结 ......................................................................................... 361 第12章 资源库 ..................................................................363 面向集合资源库 .............................................................................364 Hibernate实现 ......................................................................... 369 TopLink实现 ........................................................................... 377 面向持久化资源库 .......................................................................... 379 Coherence实现 ....................................................................... 381 MongoDB实现 ........................................................................ 386 额外的行为 ..................................................................................... 391 管理事务 ......................................................................................... 393 警告 ......................................................................................... 397 类型层级 ......................................................................................... 397 资源库 vs 数据访问对象(DAO) .................................................400 测试资源库 ..................................................................................... 401 以内存实现进行测试 .............................................................404 本章小结 .........................................................................................407 第13章 集成限界上下文 .....................................................409 集成基础知识 .................................................................................409 分布式系统之间存在根本性区别 ...........................................411 跨系统边界交换信息 ..............................................................411 通过REST资源集成限界上下文 .................................................... 417 实现REST资源 ....................................................................... 418 使用防腐层实现REST客户端 ................................................ 421 通过消息集成限界上下文 .............................................................. 428 从Scrum的产品负责人和团队成员处得到持续通知 .................... 428 你能处理这样的职责吗? ..................................................... 434 长时处理过程,以及避免职责 ............................................... 439 长时处理过程的状态机和超时跟踪器 .................................. 450 设计一个更复杂的长时处理过程 ..........................................460 xvi 当消息机制或你的系统不可用时 ...........................................464 本章小结 .........................................................................................465 第14章 应用程序 ...............................................................467 用户界面 .........................................................................................469 渲染领域对象 ......................................................................... 470 渲染数据传输对象 ................................................................. 471 使用调停者发布聚合的内部状态 .......................................... 471 通过领域负载对象渲染聚合实例 .......................................... 472 聚合实例的状态展现.............................................................. 473 用例优化资源库查询 .............................................................. 474 处理不同类型的客户端 .......................................................... 474 渲染适配器以及处理用户编辑 .............................................. 475 应用服务 ......................................................................................... 478 示例应用服务 ......................................................................... 478 解耦服务输出 .........................................................................485 组合多个限界上下文 ......................................................................487 基础设施 .........................................................................................489 企业组件容器 .................................................................................490 本章小结 .........................................................................................494 附录A 聚合与事件源:A+ES ..............................................495 应用服务内部 ................................................................................. 496 命令处理器 .....................................................................................505 Lambda语法....................................................................................508 并发控制 ......................................................................................... 510 A+ES所带来的结构自由性 ............................................................. 513 性能 ................................................................................................. 513 实现事件存储 ................................................................................. 516 关系型持久化 ................................................................................. 520 BLOB持久化 .................................................................................. 522 专注的聚合 ..................................................................................... 523 读模型投射 ..................................................................................... 524 xvii 与聚合设计一道使用 ..................................................................... 527 增强事件 ......................................................................................... 527 工具和模式 ..................................................................................... 529 事件序列器 ............................................................................. 530 事件不变性 ............................................................................. 531 值对象 ..................................................................................... 531 协议生成 ......................................................................................... 534 单元测试和需求规范 ..................................................................... 535 事件源和函数式语言 ..................................................................... 536 参考文献 ...........................................................................539 |