Table of Contents

Foreword
Preface
Acknowledgments

Part I. Putting the Domain Model to Work

1.       Crunching Knowledge

Why It Worked
Knowledge Crunching
Continuous Learning
Knowledge-Rich Design
Deep Models

2.       Communication and the Use of Language

UBIQUITOUS LANGUAGE
Modeling Out Loud
One Team, One Language
Documents and Diagrams
      Written Design Documents
      Executable Bedrock
Explanatory Models

3.       Binding Model and Implementation

Model-Driven
Design

Modeling Paradigms and Tool Support
Letting the Bones Show: Why Models Matter to Users
Hands-On Modelers

Part II. The Building Blocks of a Model-Driven Design

4.       Isolating the Domain

Layered Architecture
       Relating the Layers
       Architectural Frameworks
The Domain Layer Is Where the Model Lives
The Smart UI Anti-Pattern
       Advantages
       Disadvantages
       Other Kinds of Isolation

5.       A Model Expressed in Software

Associations
Entities (aka Reference Objects)
       Modeling Entities
       Designing the Identity Operation
Value
Objects

       Designing Value Objects
      
Designing Associations That Involve Value Objects
Services
       Services and the Isolated Domain Layer
       Granularity
       Access to Services
Modules (aka Packages)
       Agile Modules
       The Pitfalls of Infrastructure-Driven Packaging
Modeling Paradigms
       Why the Object Paradigm Predominates
       Nonobjects in an Object World
       Sticking with Model-Driven Design When Mixing Paradigms

6.       The Life Cycle of a Domain Object

Aggregates
Factories
       Choosing Factories and Their Sites
       When a Constructor Is All You Need
       Designing the Interface
       Where Does the Invariant Logic Go?
       ENTITY Factories Versus Value Object Factories
       Reconstituting Stored Objects
Repositories
       Querying a RepositorY
       Client Code Ignores RepositorY Implementation; Developer Does Not
       Implementing a RepositorY
       Working Within Your Frameworks
       The Relationship with Factories
Designing Objects for Relational Databases

7.       An Extended Example: Using the Language

Part III. Refactoring Toward Deeper Insight

8.       Breakthrough

9.       Making Implicit Concepts Explicit

Digging Out Concepts
       Listen to Language
       Scrutinize Awkwardness
       Contemplate Contradictions
       Read the Book
       Try, Try Again
How to Model Less Obvious Kinds of Concepts
       Explicit Constraints
       Processes As Domain Objects
Specification
       Applying and Implementing Specification
       Validation

10.       Supple Design

Intention-Revealing Interfaces
Side-Effect-Free
Functions

Assertions
Conceptual
Contours

Standalone
Classes

Closure Of
Operations

Declarative Design
       Domain-Specific Languages
A Declarative Style of Design
       Extending Specifications in a Declarative Style
Angles of Attack
       Carve Off Subdomains
       Draw on Established Formalisms, When You Can

11.       Applying Analysis Patterns

12.       Relating Design Patterns to the Model

Strategy (aka Policy)
Composite
       Why Not Flyweight?

13.       Bringing the Pieces Together

Initiation
Exploration Teams
Prior Art
A Design for Developers
Timing
Crisis As Opportunity

Part IV. Strategic Design

14.       Maintaining Model Integrity

Bounded Context
       Recognizing Splinters Within a Bounded Context
Continuous
Integration

Context Map
       Testing at the Context Boundaries
       Organizing and Documenting Context MapS
Relationships Between Bounded ContextS
SHARED KERNEL
Customer/Supplier
Development Teams

Conformist
Anticorruption
Layer

       Designing the Interface of the Anticorruption Layer
       Implementing the Anticorruption Layer
       A Cautionary Tale
Separate Ways
Open Host
Service

Published
Language

Unifying an Elephant
Choosing Your Model Context Strategy
       Team Decision or Higher
       Putting Ourselves in Context
       Transforming Boundaries
       Accepting That Which We Cannot Change: Delineating the External Systems
       Relationships with the External Systems
       The System Under Design
       Catering to Special Needs with Distinct Models
       Deployment
       The Trade-off
       When Your Project Is Already Under Way
Transformations
       Merging Contexts (Separate Ways Shared Kernel)
       Merging Contexts (Shared Kernel Continuous Integration)
       Phasing Out a Legacy System
       Open Host Service Published Language

15.       Distillation

Core Domain
       Choosing the Core
       Who Does the Work?
An Escalation of Distillations
Generic
Subdomains

       Generic Doesnt Mean Reusable
       Project Risk Management
Domain
Vision Statement

Highlighted Core
       The Distillation Document
       The Flagged Core
       The Distillation Document As Process Tool
Cohesive
Mechanisms

       Generic Subdomain Versus Cohesive Mechanism
       When a Mechanism Is Part of the Core Domain
Distilling to a Declarative Style
Segregated Core
       The Costs of Creating a Segregated Core
       Evolving Team Decision
Abstract Core
Deep Models Distill
Choosing Refactoring Targets

16.       Large-Scale Structure

Evolving Order
System
Metaphor

       The Naive Metaphor and Why We Dont Need It
Responsibility
Layers

       Choosing Appropriate Layers
Knowledge
Level

Pluggable
Component Framework

How Restrictive Should a Structure Be?
Refactoring Toward a Fitting Structure
       Minimalism
       Communication and Self-Discipline
       Restructuring Yields Supple Design
       Distillation Lightens the Load

17.       Bringing the Strategy Together

Combining Large-Scale Structures and Bounded Contexts
Combining Large-Scale Structures and Distillation
Assessment First
Who Sets the Strategy?
       Emergent Structure from Application Development
       A Customer-Focused Architecture Team
Six Essentials for Strategic Design Decision Making
       The Same Goes for the Technical Frameworks
       Beware the Master Plan

Conclusion

Appendix. The Use of Patterns in This Book
Glossary
References
Index

Leave a Reply

You must be logged in to post a comment.

Domain-Driven Design Community