对开发软件中普遍的场景开展了非常好的抽象性,分类。 尽管一些地区说得不足深入,一些地区的感染力不足,还一些地区乃至欺诈比较严重(例如运用信息集成化限界语义时,根据恶性事件产生時间来处理次序难题的计划方案,假如消費端布署在好几个连接点,这一计划方案就是说不太好的,或是很不完善,而这在现阶段互联网技术运用中是十分广泛的状况)。 但这书对怎样运用DDD,怎样立在更高的层级开展设计方案,怎样衡量设计方案,开展了清楚的表明,并明确提出了行之有效的提议和标准。 始终在想外国人为何那么擅于抽象性、造就新词汇,从而创建一整套管理体系/观念/方式
读后感:前3章能够略过(免于退避三舍),从第4章刚开始读。最有使用价值的层面是在其中讲来到许多设计方案与技术性实现关键点,在具体新项目中大多数碰到过。有关书中提到“事件驱动构架(异步-信息体制)”,基础理论超过具体,忽视了1个情况严重的难题,就是说分布式事务管理方法。就本人现阶段的工作经验与了解,MQ信息体制更合适做为不一样运用间的集成化技术性。
发展战略设计方案教會你如何恰当的区划行业、子行业,如何设计方案有效的限界语义,如何和专家合作明确通用性語言。
防守战术设计方案中,实体线、值另一半、聚合物、资料库、行业恶性事件等定义,较为全的遮盖了开发设计各个领域。
或许在日常生活中,并沒有见到过许多人应用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
- 理解限界上下文..................... 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