求真百科歡迎當事人提供第一手真實資料,洗刷冤屈,終結網路霸凌。

实现领域驱动设计查看源代码讨论查看历史

跳转至: 导航搜索
实现领域驱动设计

《实现领域驱动设计》是2014年3月电子工业出版社出版图书,作者是Vaughn Vernon。

基本内容

定价:99.00元

出版时间:2014年3月

开本:16开

页数:584页

书名:实现领域驱动设计

出版社:电子工业出版社

作者:Vaughn Vernon(沃恩.弗农)

译者:滕云

ISBN:978-7-121-22448-5

图书简介

领域驱动设计(DDD)是教我们如何做好软件的,同时也是教我们如何更好地使用面向对象技术的。它为我们提供了设计软件的全新视角,同时也给开发者留下了一大难题:如何将领域驱动设计付诸实践?Vaughn Vernon 的这本《实现领域驱动设计》为我们给出了全面的解答。

《实现领域驱动设计》分别从战略和战术层面详尽地讨论了如何实现DDD,其中包含了大量的最佳实践、设计准则和对一些问题的折中性讨论。《实现领域驱动设计》共分为14 章,在DDD 战略部分,《实现领域驱动设计》向我们讲解了领域、限界上下文、上下文映射图和架构等内容,战术部分包括实体、值对象、领域服务、领域事件、聚合和资源库等内容。一个虚构的案例研究贯穿全书,这对于实例讲解DDD 实现来说非常有用。

《实现领域驱动设计》在DDD 的思想和实现之间建立起了一座桥梁,架构师和程序员均可阅读,同时也可以作为一本DDD 参考书。

推荐

著译俱佳 ThoughtWorks资深咨询师倾力译、校,完整涵盖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

RESTfulHTTP服务器的关键方面 ........................................ 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

作者简介

Vaughn Vernon是一个经验丰富的软件工匠,在软件设计、开发和架构方面拥有超过25年的从业经验。他提倡通过创新来简化软件的设计和实现。从20世纪80年代开始,他便开始使用面向对象语言进行编程;在 20世纪 90年代早期,他便在领域建模中应用了领域驱动设计,那时他使用的是Smalltalk语言。他在很多业务领域都有从业经验,包括航空、环境、地理、保险、医学和电信等领域。同时,Vaughn在技术上也取得了很大的成功,包括开发可重用的框架和类库等。他在全球范围之内提供软件咨询和演讲,此外,他还在许多国家教授《实现领域驱动设计》的课程。你可以通过个人网站访问到他的最新研究成果。他的Twitter:@VaughnVernon。[1]

参考文献