Implementing Domain-Driven Design
One of the most common criticisms targeted at Eric Evans' Domain Driven Design : Tackling Complexity in the Heart of Software , is that it often left teams confused as to how best to go ahead and implement the concepts, ideas and practices contained in the book. Eric Evans himself is often cited that he regretted the sequence of the book, because he felt it confused readers.
Domain-Driven Design is an approach to software development that centres the development on programming a domain model that has a rich understanding of the processes and rules of a domain.
Domain Driven Design put into words the collective experience of Object Orientated Programming that forms the theory of Domain Driven Design. Implementing Domain Driven Design builds on this theory by providing practical tools and techniques to enable Domain Driven Design in real world projects.
Vaughn Vernon is a highly regarded software engineer with more than twenty-five years of development experience. Vernon is a pioneer in the world of Domain Driven Design and simplifying the design of software applications.
The core concept of the book is that you follow a team of developers working on a number of related projects. Each chapter of the book the team is unsure how to tackle a specific problem and therefore they are forced to take a naive initial idea and iterate to discover the best solution. We continue to follow the team's thought processes and epiphanies as they discover how the theory of Domain Driven Design can be applied to the problems they face.
The content is a balanced mix of concept, discussion about the original DDD material by Eric Evans and examples, including some code listing that show how you implement the concepts in the software.
What I learned from this Book
The iterative approach gently introduces you to a lot of high-level patterns and techniques, also providing an inside look into the reasoning of how certain decisions are made and how the team arrived at the solution.
This book is key to fully understanding a lot of the benefits of Domain Driven Design. The theoretical solutions discussed in Domain Driven Design are easier to understand after seeing a working solution in the context of a real world application.
The code samples in the book also provide a lot of subtle guidance of Object Orientated best practices and how to think about structuring your code in non-trivial applications.
My personal favourite chapter of this book is chapter 4, which is quite the comprehensive chapter, and a very well presented. It discusses architecture and covers a lot of architectural patterns relevant to enterprise solutions as well as making reference to what approaches to take with medium-scaled solutions where the complexity and demand is less involved.
The list of topics covered is quite comprehensive so Iâ€™ll provide an abbreviated list;
- Layer Architecture (before and after DI is introduced)
- Ports and Adapters Architecture (Hexagonal/Onion)
- use-case driven and event-driven architecture
- grid-based distributed computing
Why I recommend this book
Reading Implementing Domain Driven Design after Domain Driven Design will enable connecting the dots between the theory and the implementation and how to take these ideas and apply them in your day-to-day work. Implementing Domain Driven Design is fantastic exploration of how to practically implement the ideas of Domain Driven Design.
The work is filled with a wealth of knowledge but still succeeds in being easy to read and hold your attention throughout all of the nearly 600 pages.
I recommend the book to software architects and developers concerned with the architecture and long term evolution of the applications.