序............... 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
         理解限界上下文..................... 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
         管道和过滤器..................... 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
         概念整体................................ 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
         从领域模型中发布领域事件.............................. 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
         通过标识引用使多个聚合协同工作 ...................................... 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
         领域服务中的工厂.......................... 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
         当消息机制或你的系统不可用时 ...........................................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
         与聚合设计一道使用 ................ 527
         增强事件 ........................... 527
         工具和模式 ................... 529
         事件序列器 .......... 530
         事件不变性 ................ 531
         值对象 ..................... 531
         协议生成 .................... 534
         单元测试和需求规范 .............. 535
         事件源和函数式语言 .......... 536
         参考文献 ..................539
      · · · · · ·     (
收起)