书籍详情
领域驱动设计:软件核心复杂性应对之道
作者:(美)伊文斯(Evans, E.)著;陈大峰译
出版社:清华大学出版社
出版时间:2006-03-01
ISBN:9787302115762
定价:¥48.00
购买这本书可以去
内容简介
“每个有思想的软件开发者的书架上都应该有这样一本书”——KentBeck“Eric设法收集了经验丰富的对象设计人员一直使用的一些设计过程,作为一个团队的人们在这些过程中却没能够成功地完成剩下的工作。人们将知识弄得支离破碎……却从来没有将建立领域逻辑的原则组织起来并使其系统化。这本书是非常重要的。”——KyleBrown,《EnterpriseJavaProgrammingwithIBMWebSphere》的作者。本书涉及的主题具体包括:●隔离领域●实体、值对象、服务和模块●一个领域对象的生命周期●将过程表示为领域对象●创建没有副作用的函数●总体轮廓●独立的类●扩展说明●应用分析模式●将设计模式与模型相联系●维护模型的完整性●设计领域前景声明●选择重构目标●职责层次●创建可插入的组件框架●结合大比例结构与界限上下文本书为读者系统地介绍了领域驱动的设计方法。书中介绍了大量优秀的设计示例、基于经验的技术以及促进处理复杂领域的软件开发的基本原则。本书将设计和开发实践相结合,在介绍领域驱动设计时,还提供了大量的Java示例,这些例子都是从实际中提取出来的,展示了领域驱动设计在软件开发中的实际应用。通过对本书的阅读,读者将获得对领域驱动设计的总体认识,了解领域驱动设计中涉及的关键原则、术语和推断。本书介绍的经验和标准模式将为开发团队提供一种通用语言。另外,书中还介绍了如何在领域模型中进行重构,如何与敏捷开发进行集成,如何获得对领域更深的认识并增进领域专家和程序员之间的交流等。并在此基础上,介绍了在复杂系统和较大组织中进行的领域驱动设计。
作者简介
陈大峰,国防科技大学计算机与技术博士,研究方向;分布式计算;研究课题为过程集成工作流。对UML建模、EDOC、工作流和过程集成有深入的研究,曾发表多篇论文和专业文章。目前担任某消息代理中间件产品开发组长,一直使用UML作为设计工具和沟通工具,并取得显著成果。
目录
第Ⅰ部分 让领域模型发挥作用
第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
第Ⅱ部分 模型驱动设计的构建块
第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.2 粒度 77
5.4.3 访问服务 77
5.5 模块(包) 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.4 如何放置不变量的逻辑 103
6.2.5 实体工厂与值对象工厂 103
6.2.6 存储对象的重建 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 Event127
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
第Ⅲ部分 面向更深层解的重构
第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.3 着眼于根本 151
8.4 尾声:一连串的新理解 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
第Ⅳ部分 战略性设计
第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.10 开放主机服务 284
14.11 公布语言 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 转换 296
14.14.1 合并上下文:隔离
方式→共享内核 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.3.2 项目风险管理 313
15.4 领域愿景声明 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.10 深层模型精炼 329
15.11 选择重构的目标 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章 综合应用战略性设计 364
17.1 大比例结构和限界上下文
的结合 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
第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
第Ⅱ部分 模型驱动设计的构建块
第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.2 粒度 77
5.4.3 访问服务 77
5.5 模块(包) 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.4 如何放置不变量的逻辑 103
6.2.5 实体工厂与值对象工厂 103
6.2.6 存储对象的重建 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 Event127
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
第Ⅲ部分 面向更深层解的重构
第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.3 着眼于根本 151
8.4 尾声:一连串的新理解 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
第Ⅳ部分 战略性设计
第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.10 开放主机服务 284
14.11 公布语言 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 转换 296
14.14.1 合并上下文:隔离
方式→共享内核 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.3.2 项目风险管理 313
15.4 领域愿景声明 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.10 深层模型精炼 329
15.11 选择重构的目标 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章 综合应用战略性设计 364
17.1 大比例结构和限界上下文
的结合 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
猜您喜欢