Domain-driven design (DDD) is an approach to developing software for complex needs by deeply connecting the implementation to an evolving model of the core business concepts. Note that conceptual DDD questions are better to be asked at softwareengineering.stackexchange.com.
The premise of domain-driven design is the following:
- Placing the project's primary focus on the core domain and domain logic
- Basing complex designs on a model
- Initiating a creative collaboration between technical and domain experts to iteratively cut ever closer to the conceptual heart of the problem.
Domain-driven design is not a technology or a methodology. DDD provides a structure of practices and terminology for making design decisions that focus and accelerate software projects dealing with complicated domains.
The term was coined by Eric Evans in his book of the same title: Domain-Driven Design: Tackling Complexity in the Heart of Software
Books
- Domain-Driven Design, Tackling Complexity in the Heart of Software
- Domain-Driven Design Distilled
- Implementing Domain-Driven Design
- Domain Driven Design Quickly
- DDD Reference
- Applying Domain-Driven Design and Patterns: With Examples in C# and .NET
- Patterns, Principles, and Practices of Domain-Driven Design
- Domain-Driven Design in PHP
Sample Application