What is Domain-Driven Design (DDD)
A definition of DDD as a software design discipline
Published on 22 September 2021
Domain-Driven Design is a software design discipline centred on the principles that:
As a mnemonic:
DDD is a design discipline where you
Domain-Driven Design presents an all-encompassing view on software design. It considers design from the micro-level of code and design patterns, to models and their language, to communication and relationships between models, to the large scale reasoning about systems of systems. On top of that, it aims to be pragmatic. You don’t apply DDD everywhere, you do it where it will have the most impact.
DDD is not prescriptive. It doesn’t have rules of how to do it, and is open to new interpretation. It doesn’t prescribe methods, or practices, and even the patterns in the book1 are meant to be illustrative rather than a final set. Many methods that people now consider core to DDD, such as EventStorming, didn’t exist when the book was written.
That makes DDD notoriously hard to define. This definition is specifically focused on DDD as a discipline, that is, design as something you do, activities with a set of guiding principles. I’ve been using and improving this definition in my workshops for probably 6 or 7 years now, so I hope that makes it hardened enough to be useful for both newcomers to DDD and seasoned practitioners. I hope that keep it up to date with new insights.
What is Domain-Driven Design (DDD) by Mathias Verraes is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.
“Domain-Driven Design - Tackling Complexity in the Heart of Software” — Eric Evans, Addison-Wesley Professional, 2003 ↩