Domain-driven design (DDD) provides a structure of practices and terminology for making design decisions
that focus and accelerate software projects dealing with complicated domains.
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.
Core definitions
- Domain - A sphere of knowledge, influence, or activity. The
subject area to which the user applies a program is the domain of the
software.
- Model - A system of abstractions that describes selected
aspects of a domain and can be used to solve problems related to that
domain.
- Ubiquitous Language - A language structured around the domain
model and used by all team members to connect all the activities of the
team with the software.
- Context - The setting in which a word or statement appears that
determines its meaning.
Prerequisites for the successful application of DDD
- Your domain is not trivial
- The project team has experience and interest in OOP/OOD
- You have access to domain experts
- You have an iterative process