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 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 CUSTOMER/SUPPLIER 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 Doesn’t 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