Strategic Domain Driven Design - SoCraTesUK/socrates-uk GitHub Wiki
The essence of DDD is
- capturing a model of the domain
- embedding it in the code
- protecting it from corruption
Strategic Design
- Domain
- Sub Domain (Core, Supporting and Generic)
- Bounded Context
- Ubiquitous Language
- Context Map (Shared Kernel, Anti-Corruption Layer and Customer-Supplier)
Tactical
- Aggregate
- Entity
- Value Object
- Domain Event
- Domain Service
- Repository
- [Layered Architecture]
- Factory
Strategic Design -> Tactical Modelling
Do Strategic Design first to determine the areas of the Domain that you may want to do Tactical Modelling on.
Best Practice
- Don't aim for perfection as it doesn't exist. Discover models that are valid.
- Making the implicit Explicit
- Distill the problem domain into sub-domains
- Focus on what is important
- DDD doesn’t work without a domain expert
- Don't settle on the first model that works. Iterate towards deeper insight.
- Challenge your assumptions
- Modelling is a continuous activity not a one-off.
Resources
- Domain-Driven Design: Tackling Complexity in the Heart of Software [Eric Evans]
- Implementing Domain-Driven Design [Vaughn Vernon]
- Domain-Driven Design Distilled [Vaughn Vernon]