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