Software → Software Design
DDD
A software design approach that models software around the language, rules, and boundaries of a business domain.
Motivation
DDD solves the problem of software models drifting away from the real business domain. It gives teams language and structure for modeling complex business behavior.
Strategic design
Strategic DDD divides a large domain into Bounded Contexts, each with its own Ubiquitous Language and Domain Model. A Context Map documents how those contexts interact and where translations or protective boundaries are needed.
Tactical design
Inside a bounded context, teams may model Domain Entities, Value Objects, Aggregates, Aggregate Roots, and Domain Events. These patterns help express identity, invariants, consistency boundaries, and meaningful business changes.
A Domain Diagram can be used to explore and communicate the model with domain experts.
Mental model
The code should reflect the language and boundaries of the domain. Instead of one universal model, DDD encourages explicit models inside bounded contexts.
Common mistakes
- Applying DDD ceremony to simple CRUD systems.
- Treating entities as database tables only.
- Treating every microservice as a bounded context.
- Ignoring collaboration with domain experts.