网站颜色:

官方正版 实现领域驱动设计 Vaughn Vernon 软硬件技术 专业科技 电子工业出版社.

  • 产品名称:实现领域驱动设计
  • 书名:实现领域驱动设计
  • 作者:VaughnVernon
  • 作者地区:美国
  • 译者:滕云
  • 定价:99.00元
  • 书名:实现领域驱动设计
  • 开本:16开
  • 是否是套装:否
  • 出版社名称:电子工业出版社


内容介绍

内容简介:

      本书分别从战略和战术层面详尽地讨论了如何实现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

热门设计服务