《领域驱动设计 软件核心复杂性应对之道》PDF下载

  • 购买积分:13 如何计算积分?
  • 作  者:(美)Eric Evans著;陈大峰,张泽鑫等译
  • 出 版 社:北京:清华大学出版社
  • 出版年份:2006
  • ISBN:7302115761
  • 页数:390 页
图书介绍:本书介绍了领域驱动设计方面的术语、关键原则等,并提供了大量优秀的设计示例。书中还附带了图片、图进行说明。

第Ⅰ部分 让领域模型发挥作用 5

第1章 消化知识 5

1.1 有效建模的因素 9

1.2 知识消化 10

1.3 持续学习 11

1.4 知识丰富的设计 12

1.5 深层模型 15

第2章 交流及语言的使用 17

2.1 通用语言 17

2.2 利用对话改进模型 22

2.3 一个团队,一种语言 24

2.4 文档和图 25

2.4.1 书面的设计文档 27

2.4.2 执行的基础 29

2.5 说明性模型 29

第3章 将模型和实现绑定 32

3.1 模型驱动设计 33

3.2 建模范型和工具支持 36

3.3 突出主旨:为什么模型对用户很关键 41

3.4 实践型建模人员 43

第Ⅱ部分 模型驱动设计的构建块 47

第4章 分离领域 47

4.1 分层架构 47

4.1.1 层间的联系 51

4.1.2 架构框架 51

4.2 模型属于领域层 52

4.3 其他种类的隔离 55

第5章 软件中的模型描述 56

5.1 关联 57

5.2 实体(又称引用对象) 62

5.2.1 实体建模 65

5.2.2 设计标识操作 66

5.3 值对象 68

5.3.1 设计值对象 71

5.3.2 设计包含值对象的关联 73

5.4 服务 74

5.4.1 服务和分隔的领域层 75

5.4.3 访问服务 77

5.5 模块(包) 77

5.4.2 粒度 77

5.5.1 敏捷的模块 79

5.5.2 基础结构驱动打包的缺陷 80

5.6 建模范式 82

5.6.1 对象范式的优势 82

5.6.2 对象世界中的非对象 84

5.6.3 在混合范式中使用模型驱动设计 85

第6章 领域对象的生命周期 87

6.1 聚合 88

6.2 工厂 96

6.2.1 工厂及其应用场所的选择 99

6.2.2 只需构造函数的情况 101

6.2.3 接口的设计 102

6.2.6 存储对象的重建 103

6.2.4 如何放置不变量的逻辑 103

6.2.5 实体工厂与值对象工厂 103

6.3 仓储 105

6.3.1 查询仓储 109

6.3.2 了解仓储实现的必要性 111

6.3.3 实现仓储 111

6.3.4 在框架内工作 113

6.3.5 与工厂的关系 113

6.4 为关系数据库设计对象 115

第7章 使用语言:扩展示例 117

7.1 货物运输系统概述 117

7.2 隔离领域:系统简介 119

7.3 区分实体和值对象 120

7.4 运输领域中的关联设计 121

7.5 聚合的边界 123

7.6 选择仓储 124

7.7 场景概述 125

7.7.1 应用特性示例:改变一件货物的目的地 126

7.7.2 应用特性示例:重复业务 126

7.8 对象的创建 126

7.8.1 Cargo的工厂和构造函数 126

7.8.2 添加一个Handling Event 127

7.9 停下来重构:Cargo聚合的另一种设计 129

7.10 运输模型中的模块 131

7.11 引入新特性:配额检查 133

7.11.1 连接两个系统 134

7.11.2 改进模型:划分业务 135

7.11.3 性能调整 137

7.12 小结 137

第Ⅲ部分 面向更深层理解的重构 143

第8章 突破 143

8.1 关于突破的故事 144

8.1.1 中看不中用的模型 144

8.1.2 突破 146

8.1.3 更深层的模型 148

8.1.4 冷静的决定 149

8.1.5 成效 150

8.2 时机 150

8.4 尾声:一连串的新理解 151

8.3 着眼于根本 151

第9章 隐含概念转变为显式概念 153

9.1 概念挖掘 153

9.1.1 倾听表达用语 154

9.1.2 检查不协调之处 157

9.1.3 研究矛盾之处 162

9.1.4 查阅书籍 162

9.1.5 尝试,再尝试 164

9.2 如何建模不太明显的概念 164

9.2.1 显式的约束 165

9.2.2 作为领域对象的流程 167

9.2.3 规格 168

9.2.4 规格的应用和实现 171

第10章 柔性设计 184

10.1 释意接口 186

10.2 无副作用函数 190

10.3 断言 194

10.4 概念轮廓 197

10.5 孤立类 201

10.6 操作封闭 203

10.7 声明性设计 205

10.8 一个声明性风格的设计 207

10.9 攻击角度 215

10.9.1 切分子领域 215

10.9.2 尽可能利用现成的形式 216

第11章 应用分析模式 225

第12章 把设计模式和模型联系起来 237

12.1 策略 238

12.2 组合 241

12.3 为什么不用Flyweight? 245

第13章 向更深层理解重构 247

13.1 发起重构 247

13.2 探索团队 248

13.3 前期工作 249

13.4 针对开发人员设计 249

13.5 时机选择 250

13.6 将危机视为机会 250

第Ⅳ部分 战略性设计 255

第14章 维护模型完整性 255

14.1 限界上下文 257

14.2 持续集成 261

14.3 上下文映射 263

14.3.1 在上下文边界上的测试 269

14.3.2 组织和文档化上下文映射 269

14.4 限界上下文之间的关系 270

14.5 共享内核 271

14.6 顾客/供应商开发团队 272

14.7 同流者 275

14.8 防腐层 277

14.8.1 设计防腐层的接口 279

14.8.2 实现防腐层 279

14.8.3 一个关于警戒的故事 282

14.9 隔离方式 282

14.11 公布语言 284

14.10 开放主机服务 284

14.12 盲人摸象 287

14.13 选择模型上下文的策略 290

14.13.1 团队或更高层的决策 290

14.13.2 把自己放在上下文中 291

14.13.3 转换边界 291

14.13.4 接受我们不能改变的东西:描绘外部系统 292

14.13.5 与外部系统的关系 292

14.13.6 在设计系统 293

14.13.7 满足不同模型的特别需要 293

14.13.8 部署 294

14.13.9 权衡 295

14.13.10 考虑项目已经进行的情况 295

14.14.1 合并上下文:隔离方式→共享内核 296

14.14 转换 296

14.14.2 合并上下文:共享内核→持续集成 297

14.14.3 逐步淘汰原有系统 298

14.14.4 开放主机服务→公布语言 299

第15章 精炼 301

15.1 核心领域 302

15.1.1 选择核心 305

15.1.2 谁来负责精炼工作 305

15.2 精炼的逐步升级 306

15.3 通用子域 307

15.3.1 通用不一定可重用 312

15.4 领域愿景声明 313

15.3.2 项目风险管理 313

15.5 突出核心 315

15.5.1 精炼文档 316

15.5.2 把核心标记出来 317

15.5.3 把精炼文档作为开发过程的工具 318

15.6 内聚机制 319

15.6.1 通用子域与内聚机制 320

15.6.2 属于核心领域的机制 321

15.7 精炼到声明性风格 321

15.8 隔离核心 322

15.8.1 创建隔离核心的代价 323

15.8.2 推进团队决策 323

15.9 抽象核心 328

15.11 选择重构的目标 329

15.10 深层模型精炼 329

第16章 大比例结构 330

16.1 渐进顺序 333

16.2 系统隐喻 335

16.3 职责层 337

16.4 知识级别 349

16.5 插件框架 356

16.6 结构的约束 360

16.7 重构到合适的结构 361

16.7.1 最小化 362

16.7.2 交流和自律 362

16.7.3 结构重组产生柔性设计 362

16.7.4 精炼为开发指路 363

17.1 大比例结构和限界上下文的结合 364

第17章 综合应用战略性设计 364

17.2 大比例结构和精炼的结合 367

17.3 首先进行评估 369

17.4 由谁制定策略 369

17.4.1 在开发过程中自发产生 369

17.4.2 以客户为中心的架构团队 370

17.5 制定战略性设计决策的6个要点 370

17.5.1 技术框架同样如此 373

17.5.2 提防总体规划 374

第18章 尾声 375

附录A 关于模式 380

附录B 术语表 383

附录C 参考文献 387

附录D 关系图 389