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:
- End-to-end method and tool chain to get from domain-driven designs to service APIs (with Context Mapper and MDSL)
- Domain-Driven Design in Practice – Experience with Context Mapper: blog posts by Olaf Zimmermann and Stefan Kapferer
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
- What is Domain-Driven Design (DDD), DDD Community
- The Anatomy Of Domain-Driven Design - Booklet by S. Millet
- D. Laribee, An Introduction to DDD, MSDN Best Practice, February 2009
- D. Haywood, An Introduction to Domain Driven Design, Methods & Tools
- Speaker decks by M. Ploed, start here
Books (Selection, Reverse Chronological Order)
- M. Ploed, Hands-on Domain-diven Design - by example, Leanpub
- Domain-Driven Design: The First 15 Years, Leanpub
- V. Vernon, DDD Distilled; a German translation is available: DDD Kompakt
- S. Millett with N. Tune, Patterns, Principles, and Practices of DDD, J. Wiley & Sons 2015
- V. Vaughn, Implementing DDD, Addison Wesley 2014
- F. Marinescu, Domain-Driven Design Quickly (InfoQ e-book, 2006)
- E. Evans, Domain-Driven Design - Tackling Complexity in the Heart of Software (the book that started it all), Addison Wesley 2003 (a non-technical reading path is recommended here and additional resources from the Domain Language consultancy can be found here)
Tools
- Context Mapper DSL and tools for strategic DDD by Stefan Kapferer (Background & Publications).
- Sculptor (DSL and tool for tactic DDD)
- vlingo/platform platform for «Reactive, Event-Driven Apps & Microservices supporting DOMA, DDD, and other approaches»
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
- DDD content on InfoQ
- DDD and REST (in Microservices Context), ICWE 2016 (Un-)Panel moderated by O. Zimmermann
- Recorded conference presentations on DDD and Microservices by E. Evans, V. Vernon and M. Ploed.
- DDD Crew on GitHub
- DDD Community