Addison Wesley, 2003. — 560 p. — ISBN 0-321-12521-5.
Specific topics covered include:Representing processes as domain objects
Creating functions free of side effects
Conceptual contours
Standalone classes
Extending specifications
Applying analysis patterns
Relating design patterns to the model
Maintaining model integrity
Formulating the domain vision statement
Choosing refactoring targets
Responsibility layers
Creating a pluggable component framework
Bringing together large-scale structures and bounded contexts
Praise for Domain-Driven Design
Foreword
Contrasting Three Projects
The Challenge of Complexity
Design Versus Development Process
The Structure of This Book
Who Should Read This Book
A Domain-Driven Team
Putting the Domain Model to WorkCrunching KnowledgeIngredients of Effective Modeling
Knowledge Crunching
Continuous Learning
Knowledge-Rich Design
Deep Models
Communication and the Use of LanguageUbiquitous Language
Modeling Out Loud
One Team, One Language
Documents and Diagrams
Explanatory Models
Binding Model and ImplementationModel-Driven Design
Modeling Paradigms and Tool Support
Letting the Bones Show: Why Models Matter to Users
Hands-On Modelers
The Building Blocks of a Model-Driven DesignIsolating the DomainLayered Architecture
The Domain Layer Is Where the Model Lives
The Smart UI "Anti-Pattern"
Other Kinds of Isolation
A Model Expressed in SoftwareAssociations
Entities (a.k.a. Reference Objects)
Value Objects
Services
Modules (a.k.a. Packages)
Modeling Paradigms
The Life Cycle of a Domain ObjectAggregates
Factories
Repositories
Designing Objects for Relational Databases
Using the Language: An Extended ExampleIntroducing the Cargo Shipping System
Isolating the Domain: Introducing the Applications
Distinguishing ENTITIES and VALUE Objects
Designing Associations in the Shipping Domain
AGGREGATE Boundaries
Selecting REPOSITORIES
Walking Through Scenarios
Object Creation
Pause for Refactoring: An Alternative Design of the Cargo AGGREGATE
MODULES in the Shipping Model
Introducing a New Feature: Allocation Checking
A Final Look
Refactoring Toward Deeper InsightBreakthroughStory of a Breakthrough
Opportunities
Focus on Basics
Epilogue: A Cascade of New Insights
Making Implicit Concepts ExplicitDigging Out Concepts
How to Model Less Obvious Kinds of Concepts
Supple DesignIntention-Revealing Interfaces
Side-Effect-Free Functions
Assertions
Conceptual Contours
Standalone Classes
Closure of Operations
Declarative Design
A Declarative Style of Design
Angles of Attack
Applying Analysis PatternsExample
Earning Interest with Accounts
Example
Insight into the Nightly Batch
Analysis Patterns Are Knowledge to Draw On
Relating Design Patterns to the ModelStrategy (A.K.A.Policy)
Composite
Why Not FLYWEIGHT?
Refactoring Toward Deeper InsightInitiation
Exploration Teams
Prior Art
A Design for Developers
Timing
Crisis as Opportunity
Strategic DesignMaintaining Model IntegrityBounded Context
Continuous Integration
Context Map
Relationships Between BOUNDED CONTEXTS
Shared Kernel
Customer/Supplier Development Teams
Conformist
Anticorruption Layer
Separate Ways
Open Host Service
Published Language
Unifying an Elephant
Choosing Your Model Context Strategy
Transformations
DistillationCore Domain
An Escalation of Distillations
Generic Subdomains
Domain Vision Statement
Highlighted Core
Cohesive Mechanisms
Segregated Core
Abstract Core
Deep Models Distill
Choosing Refactoring Targets
Large-Scale StructureEvolving Order
System Metaphor
Responsibility Layers
Knowledge Level
Pluggable Component Framework
How Restrictive Should a Structure Be?
Refactoring Toward a Fitting Structure
Bringing the Strategy TogetherCombining Large-Scale Structures and BOUNDED CONTEXTS
Combining Large-Scale Structures and Distillation
Assessment First
Who Sets the Strategy?
Six Essentials for Strategic Design Decision Making
Epilogues
Looking Forward
Appendix The Use of Patterns in This Book
Pattern Name