Domain-Driven Design: Tackling Complexity in the Heart of Software
“Eric Evans has written a fantastic
book on how you can make the design of your software match your
mental model of the problem domain you are addressing.
“His book is very compatible with XP.
It is not about drawing pictures of a domain; it is about how you
think of it, the language you use to talk about it, and how you
organize your software to reflect your improving understanding of
it. Eric thinks that learning about your problem domain is as
likely to happen at the end of your project as at the beginning,
and so refactoring is a big part of his technique.
“The book is a fun read. Eric has lots
of interesting stories, and he has a way with words. I see this
book as essential reading for software developers—it is a
future classic.”
—Ralph Johnson, author of
Design Patterns
“If you don’t think you are
getting value from your investment in object-oriented programming,
this book will tell you what you’ve forgotten to do.
“Eric Evans convincingly argues for
the importance of domain modeling as the central focus of
development and provides a solid framework and set of techniques
for accomplishing it. This is timeless wisdom, and will hold up
long after the methodologies du jour have gone out of
fashion.”
—Dave Collins, author of
Designing Object-Oriented User Interfaces
“Eric weaves real-world experience
modeling—and building—business applications into a
practical, useful book. Written from the perspective of a trusted
practitioner, Eric’s descriptions of ubiquitous language, the
benefits of sharing models with users, object life-cycle
management, logical and physical application structuring, and the
process and results of deep refactoring are major contributions to
our field.”
—Luke Hohmann, author of
Beyond Software Architecture
“This book belongs on the shelf of
every thoughtful software developer.”
—Kent Beck
“What Eric has managed to capture is a
part of the design process that experienced object designers have
always used, but that we have been singularly unsuccessful as a
group in conveying to the rest of the industry. We’ve given away
bits and pieces of this knowledge…but we’ve never organized and
systematized the principles of building domain logic. This book is
important.”
—Kyle Brown, author of
Enterprise Java™ Programming with IBM®
WebSphere®
The software development community widely
acknowledges that domain modeling is central to software design.
Through domain models, software developers are able to express rich
functionality and translate it into a software implementation that
truly serves the needs of its users. But despite its obvious
importance, there are few practical resources that explain how to
incorporate effective domain modeling into the software development
process.
Domain-Driven Design fills
that need. This is not a book about specific technologies. It
offers readers a systematic approach to domain-driven design,
presenting an extensive set of design best practices,
experience-based techniques, and fundamental principles that
facilitate the development of software projects facing complex
domains. Intertwining design and development practice, this book
incorporates numerous examples based on actual projects to
illustrate the application of domain-driven design to real-world
software development.
Readers learn how to use a domain model to
make a complex development effort more focused and dynamic. A core
of best practices and standard patterns provides a common language
for the development team. A shift in emphasis—refactoring not
just the code but the model underlying the code—in
combination with the frequent iterations of Agile development leads
to deeper insight into domains and enhanced communication between
domain expert and programmer. Domain-Driven Design
then builds on this foundation, and addresses modeling and design
for complex systems and larger organizations.Specific topics
covered include:
Getting all team members to speak the same language
Connecting model and implementation more deeply
Sharpening key distinctions in a model
Managing the lifecycle of a domain object
Writing domain code that is safe to combine in elaborate
ways
Making complex code obvious and predictable
Formulating a domain vision statement
Distilling the core of a complex domain
Digging out implicit concepts needed in the model
Applying analysis patterns
Relating design patterns to the model
Maintaining model integrity in a large system
Dealing with coexisting models on the same project
Organizing systems with large-scale structures
Recognizing and responding to modeling breakthroughs
With this book in hand, object-oriented
developers, system analysts, and designers will have the guidance
they need to organize and focus their work, create rich and useful
domain models, and leverage those models into quality, long-lasting
software implementations.