Domain-Driven Design: Tackling Complexity in the Heart of Software by Eric Evans
Publisher: Addison-Wesley Professional
Back in 1988 a study by Curtis and colleagues identified the thin spread of domain knowledge within development teams as one of the major problems with building large, complex systems. The situation hasn't improved much since then. Yet domain knowledge is fundamental to any project. Not only in order to know what problem to solve; domain knowledge is a key to successful software design. A hallmark of a great design is the proximity between the problem expressed by the domain and the solution expressed in code. The closer they are, the easier the reasoning and understanding of the design. Eric Evans' book is an authoritative source on the concept of such domain modeling.
Domain-Driven Design is based on the premise that software development is inherently hard due to the complexity of the problems we try to solve with software. It's an argument along Fred Brooks' reasoning of essential complexity. To tackle this complexity, we need a close proximity between the concepts in the domain and the resulting solution. Developing the models of these two domains is an iterative process; the model and the design shape each other. Eric Evans' approach is one of continuous refactoring based on the learning that happens as we develop the models. As such, a domain model is not just a technical solution. A successful domain model is the core of a common language for the software project. Such a shared project dictionary is indeed a valuable asset and one way to spread domain knowledge. The book covers these introductory, non-technical subjects before moving on to the building blocks of a model-driven design. The building blocks are captured as a pattern language in a highly accessible and communicative form.
Domain-Driven Design has received a lot of praise. I bough my own copy a year ago. My initial approach was an attempt to read it cover to cover. That didn't work well. After the initial chapters, the level of detail become overwhelming. Instead, I skimmed through the sections to gain an overall understanding of the method. Later, I've found that I often return to specific chapters. Domain-Driven Design has been a constant companion on my desk. The pattern organization makes it valuable as a detailed reference on a surprisingly wide area of our profession. Many topics go beyond the traditional technical view of design and provides insights into communication, team dynamics, and the nature of the design process itself. Eric Evans' has written a book I'll keep returning to for solid advice.
Reviewed July 2012