目录
Part I Putting the Domain Model to Work 运用领域模型 1
Chapter 1: Crunching Knowledge 消化知识 7
Ingredients of Effective Modeling 有效建模的要素 12
Knowledge Crunching 知识消化 13
Continuous Learning 持续学习 15
Knowledge-Rich Design 知识丰富的设计 17
Deep Models 深层模型 20
Chapter 2: Communication and the Use of Language 交流与语言的使用 23
UBIQUITOUS LANGUAGE 24
Modeling Out Loud 大声地建模 30
One Team, One Language 一个团队,一种语言 32
Documents and Diagrams 文档和图 35
Written Design Documents 书面设计文档 37
Executable Bedrock 完全依赖可执行代码的情况 40
Explanatory Models 解释性模型 41
Chapter 3: Binding Model and Implementation 绑定模型和实现 45
MODEL-DRIVEN DESIGN 47
Modeling Paradigms and Tool Support 建模范式和工具支持 50
Letting the Bones Show: Why Models Matter to Users 揭示主旨:为什么模型对用户至关重要 57
HANDS-ON MODELERS 60
Part II The Building Blocks of a Model-Driven Design 模型驱动设计的构造块 63
Chapter 4: Isolating the Domain 分离领域 67
LAYERED ARCHITECTURE 68
Relating the Layers 将各层关联起来 72
Architectural Frameworks 架构框架 74
The Domain Layer Is Where the Model Lives 领域层是模型的精髓 75
THE SMART UI ANTI-PATTERN THE SMART UI反模式 76
Other Kinds of Isolation 其他分离方式 79
Chapter 5: A Model Expressed in Software 软件中所表示的模型 81
Associations 关联 82
ENTITIES(A.K.A. REFERENCE OBJECTS)
ENTITY(也称为REFERENCE OBJECT) 89
Modeling ENTITIES ENTITY建模 93
Designing the Identity Operation 设计标识操作 94
VALUE OBJECTS 97
Designing VALUE OBJECTS 设计VALUE OBJECT 99
Designing Associations That Involve VALUE OBJECTS 设计包含VALUE OBJECT的关联 102
SERVICES 104
SERVICES and the Isolated Domain Layer SERVICE与孤立的领域层 106
Granularity 粒度 108
Access to SERVICES 对SERVICE的访问 108
MODULES(A.K.A. PACKAGES) MODULE(也称为PACKAGE) 109
Agile MODULES 敏捷的MODULE 111
The Pitfalls of Infrastructure-Driven Packaging 通过基础设施打包时存在的隐患 112
Modeling Paradigms 建模范式 116
Why the Object Paradigm Predominates 对象范式流行的原因 116
Nonobjects in an Object World 对象世界中的非对象 119
Sticking with MODEL-DRIVEN DESIGN When Mixing Paradigms 在混合范式中坚持使用MODEL-DRIVEN DESIGN 120
Chapter 6: The Life Cycle of a Domain Object 领域对象的生命周期 123
AGGREGATES 125
FACTORIES 136
Choosing FACTORIES and Their Sites 选择FACTORY及其应用位置 139
When a Constructor Is All You Need 有些情况下只需使用构造函数 141
Designing the Interface 接口的设计 143
Where Does Invariant Logic Go
固定规则的相关逻辑应放置在哪里 144
ENTITY FACTORIES Versus VALUE OBJECT FACTORIES ENTITY FACTORY与VALUE OBJECT FACTORY 144
Reconstituting Stored Objects 重建已存储的对象 145
REPOSITORIES 147
Querying a REPOSITORY REPOSITORY的查询 152
Client Code Ignores REPOSITORY Implementation; Developers Do Not 客户代码可以忽略REPOSITORY的实现,但开发人员不能忽略 154
Implementing a REPOSITORY REPOSITORY的实现 155
Working Within Your Frameworks 在框架内工作 156
The Relationship with FACTORIES 与FACTORY的关系 157
Designing Objects for Relational Databases 为关系数据库设计对象 159
Chapter 7: Using the Language: An Extended Example 使用语言:一个扩展的示例 163
Introducing the Cargo Shipping System 货物运输系统简介 163
Isolating the Domain: Introducing the Applications 隔离领域:引入应用层 166
Distinguishing ENTITIES and VALUE OBJECTS 将ENTITY和VALUE OBJECT区别开 167
Designing Associations in the Shipping Domain 设计运输领域中的关联 169
AGGREGATE Boundaries AGGREGATE边界 170
Selecting REPOSITORIES 选择REPOSITORY 172
Walking Through Scenarios 场景走查 173
Sample Application Feature: Changing the Destination of a Cargo 应用程序特性举例:更改Cargo的目的地 173
Sample Application Feature: Repeat Business 应用程序特性举例:重复业务 173
Object Creation 对象的创建 174
FACTORIES and Constructors for Cargo Cargo的FACTORY和构造函数 174
Adding a Handling Event 添加Handling Event 175
Pause for Refactoring: An Alternative Design of the Cargo AGGREGATE 停一下,重构:Cargo AGGREGATE 的另一种设计 177
MODULES in the Shipping Model 运输模型中的MODULE 179
Introducing a New Feature: Allocation Checking 引入新特性:配额检查 181
Connecting the Two Systems 连接两个系统 182
Enhancing the Model: Segmenting the Business 进一步完善模型:划分业务 183
Performance Tuning 性能优化 185
A Final Look 小结 186
Part III Refactoring Toward Deeper Insight 通过重构来加深理解 187
Chapter 8: Breakthrough 突破 193
Story of a Breakthrough 一个关于突破的故事 194
A Decent Model, and Yet . . . 华而不实的模型 194
The Breakthrough 突破 196
A Deeper Model 更深层模型 198
A Sobering Decision 冷静决策 199
The Payoff 成果 200
Opportunities 机遇 201
Focus on Basics 关注根本 201
Epilogue: A Cascade of New Insights 后记:越来越多的新理解 202
Chapter 9: Making Implicit Concepts Explicit
将隐式概念转变为显式概念 205
Digging Out Concepts 概念挖掘 206
Listen to Language 倾听语言 206
Scrutinize Awkwardness 检查不足之处 210
Contemplate Contradictions 思考矛盾之处 216
Read the Book 查阅书籍 217
Try, Try Again 尝试,再尝试 219
How to Model Less Obvious Kinds of Concepts
如何为那些不太明显的概念建模 219
Explicit Constraints 显式的约束 220
Processes as Domain Objects 将过程建模为领域对象 222
SPECIFICATION 224
Applying and Implementing SPECIFICATION SPECIFICATION的应用和实现 227
Chapter 10: Supple Design 柔性设计 243
INTENTION-REVEALING INTERFACES 246
SIDE-EFFECT-FREE FUNCTIONS 250
ASSERTIONS 255
CONCEPTUAL CONTOURS 260
STANDALONE CLASSES 265
CLOSURE OF OPERATIONS 268
Declarative Design 声明式设计 270
A Declarative Style of Design 声明式设计风格 273
Angles of Attack 切入问题的角度 282
Carve Off Subdomains 分割子领域 283
Draw on Established Formalisms, When You Can 尽可能利用已有的形式 283
Chapter 11: Applying Analysis Patterns 应用分析模式 293
Chapter 12: Relating Design Patterns to the Model 将设计模式应用于模型 309
STRATEGY A.K.A. POLICY STRATEGY(也称为POLICY) 311
COMPOSITE 315
Why Not FLYWEIGHT 为什么没有介绍FLYWEIGHT 320
Chapter 13: Refactoring Toward Deeper Insight 通过重构得到更深层的理解 321
Initiation 开始重构 321
Exploration Teams 探索团队 322
Prior Art 借鉴先前的经验 323
A Design for Developers 针对开发人员的设计 324
Timing 重构的时机 324
Crisis as Opportunity 危机就是机遇 325
Part IV Strategic Design 战略设计 327
Chapter 14: Maintaining Model Integrity 保持模型的完整性 331
BOUNDED CONTEXT 335
CONTINUOUS INTEGRATION 341
CONTEXT MAP 344
Testing at the CONTEXT Boundaries 测试CONTEXT的边界 351
Organizing and Documenting CONTEXT MAPS CONTEXT MAP的组织和文档化 351
Relationships Between BOUNDED CONTEXTS BOUNDED CONTEXT之间的关系 352
SHARED KERNEL 354
CUSTOMERSUPPLIER DEVELOPMENT TEAMS 356
CONFORMIST 361
ANTICORRUPTION LAYER 364
Designing the Interface of the ANTICORRUPTION LAYER 设计ANTICORRUPTION LAYER的接口 366
Implementing the ANTICORRUPTION LAYER 实现ANTICORRUPTION LAYER 366
A Cautionary Tale 一个关于防御的故事 370
SEPARATE WAYS 371
OPEN HOST SERVICE 374
PUBLISHED LANGUAGE 375
Unifying an Elephant 大象的统一 378
Choosing Your Model Context Strategy 选择你的模型上下文策略 381
Team Decision or Higher 团队决策或更高层决策 382
Putting Ourselves in Context 置身上下文中 382
Transforming Boundaries 转换边界 382
Accepting That Which We Cannot Change: Delineating the External Systems 接受那些我们无法更改的事物:描述外部系统 383
Relationships with the External Systems 与外部系统的关系 384
The System Under Design 设计中的系统 385
Catering to Special Needs with Distinct Models 用不同模型满足特殊需要 386
Deployment 部署 387
The Trade-off 权衡 388
When Your Project Is Already Under Way 当项目正在进行时 388
Transformations 转换 389
Merging CONTEXTS: SEPARATE WAYS SHARED KERNEL 合并CONTEXT:SEPARATE WAY SHARED KERNEL 389
Merging CONTEXTS: SHARED KERNEL CONTINUOUS INTEGRATION 合并CONTEXT:SHARED KERNEL CONTINUOUS INTEGRATION 391
Phasing Out a Legacy System 逐步淘汰遗留系统 393
OPEN HOST SERVICE PUBLISHED LANGUAGE 394
Chapter 15: Distillation 精炼 397
CORE DOMAIN 400
Choosing the CORE 选择CORE 402
Who Does the Work 工作的分配 403
An Escalation of Distillations 精炼的逐步提升 404
GENERIC SUBDOMAINS 406
Generic Doesnt Mean Reusable 通用不等于可重用 412
Project Risk Management 项目风险管理 413
DOMAIN VISION STATEMENT 415
HIGHLIGHTED CORE 417
The Distillation Document 精炼文档 418
The Flagged CORE 标明CORE 419
The Distillation Document as Process Tool 把精炼文档作为过程工具 420
COHESIVE MECHANISMS 422
GENERIC SUBDOMAIN Versus COHESIVE MECHANISM GENERIC SUBDOMAIN与COHESIVE MECHANISM的比较 424
When a MECHANISM Is Part of the CORE DOMAIN MECHANISM是CORE DOMAIN一部分 425
Distilling to a Declarative Style 通过精炼得到声明式风格 426
SEGREGATED CORE 428
The Costs of Creating a SEGREGATED CORE 创建SEGREGATED CORE的代价 429
Evolving Team Decision 不断发展演变的团队决策 430
ABSTRACT CORE 435
Deep Models Distill 深层模型精炼 436
Choosing Refactoring Targets 选择重构目标 437
Chapter 16: Large-Scale Structure 大型结构 439
EVOLVING ORDER 444
SYSTEM METAPHOR 447
RESPONSIBILITY LAYERS 450
KNOWLEDGE LEVEL 465
PLUGGABLE COMPONENT FRAMEWORK 475
How Restrictive Should a Structure Be 结构应该有一种什么样的约束 480
Refactoring Toward a Fitting Structure 通过重构得到更适当的结构 481
Minimalism 最小化 481
Communication and Self-Discipline 沟通和自律 482
Restructuring Yields Supple Design 通过重构得到柔性设计 482
Distillation Lightens the Load 通过精炼可以减轻负担 483
Chapter 17: Bringing the Strategy Together 领域驱动设计的综合运用 485
Combining Large-Scale Structures and BOUNDED CONTEXTS 把大型结构与BOUNDED CONTEXT结合起来使用 485
Combining Large-Scale Structures and Distillation 将大型结构与精炼结合起来使用 488
Assessment First 首先评估 490
Who Sets the Strategy 由谁制定策略 490
Emergent Structure from Application Development 从应用程序开发自动得出的结构 491
A Customer-Focused Architecture Team 以客户为中心的架构团队 492
Six Essentials for Strategic Design Decision Making 制定战略设计决策的6个要点 492
The Same Goes for the Technical Frameworks 技术框架同样如此 495
Beware the Master Plan 注意总体规划 496
Conclusion 结束语 499
Appendix: The Use of Patterns in This Book 附录:本书中模式的使用 507
Glossary 术语表 511
References 参考文献 515
Photo Credits 图片说明 517