REVIEW - Domain-driven Design - Tackling Complexity in the Heart of Software


Domain-driven Design - Tackling Complexity in the Heart of Software


Eric Evans




Addison-Wesley Professional (2004)




Huw Lloyd


April 2004



a unified a collection of recognised software pattern descriptions

Domain-driven design is concerned with aligning the core of software systems with the domain they represent. To this end the software is used to express the domain model. This book is a unified a collection of recognised software pattern descriptions, supported with UML sketches and java code snippets, suited to communicate the major concerns of iterative domain design.

'Refactoring through deeper insight' is a theme that permeates the book, an agile approach advocated by Evans, to manage the complexity of software by a continuous process of discovery of domain knowledge and its representation. Through domain-driven design Evans' advocates iterative design and understanding. When a better understanding is achieved he encourages the developers to reflect that understanding in the software's design by refactoring.

The articulation of the patterns in conjunction with a good breakdown of key programming concepts provide an exceptionally clear presentation of software design with respect to alignment with the target domain. Each sub-topic is relevant, whilst the flow and structure of the whole book is maintained from building blocks through to large-scale structure.

I was rather surprised at the scarcity of references. Although the author refers to many influences 'in the air' during the incubation of this material, I would have expected to see reference to seminal works such as Jackson's 'Problem Frames' and Coplien's 'Multi-Paradigm Design for C++'. As it stands only a handful of books are mentioned and particular bias is given towards Martin Fowler who provides a forward for the book.

Irrespective of whether you feel agile software development is for you, I highly recommend this book as a source for insight into class, module and system design.

Book cover image courtesy of Open Library.