Domain-Driven Design (DDD)

Domain-Driven Design (DDD) proposes techniques and patterns to deal with the intrinsic complexity in software development, both organizationally and technically. Key DDD themes are business-orientation, domain modeling, and knowledge reuse both on the strategical (i.e., long term, cross-project) and on the tactical (i.e., application, project, product) level. DDD has been around, in active use on real-world projects, and supported by a Community since the first DDD book came out in 2003; it recently became particularly popular in the microservices community as a way to identify service boundaries (via strategic DDD).

Blog Posts: 

Key Patterns (Selection): 

  • General: Ubiquitous Language, Model-Driven Design, Layered Architecture
  • Tactic DDD: Entity, Value Object; Aggregate, Root Entity, Service, Domain Event; Factory, Repository
  • Strategic DDD: Bounded Context, Context Map; Published Language, Shared Kernel, Open Host Service, Customer-Supplier, Conformist, Anti Corruption Layer (context relationship types)

See DDD reference for pattern summaries (PDF, Word) and/or DDD glossary in community website.

Introductions

Books (Selection, Reverse Chronological Order)

Tools

Sample Implementations

  • Lakeside Mutual scenario, a set of JavaScript frontends and Spring Boot backends featuring strategic and tactic DDD in addition to Microservice API Pattens (MAP)
  • DDD Sample Application implementing example from first DDD book (GitHub)

More Information