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.