DDD
Domain-Driven Design is a development philosophy defined by Eric Evans in Domain-Driven Design: Tackling Complexity in the Heart of Software.
Domain-Driven Design (DDD) is a concept that helps you write software closely aligned with the Business Domain. When dealing with complex business domains, DDD can help think through the problem space and solution space, and construct software that clearly demarcates different responsibility areas and communications between them.
Parts of Strategic Design:
- Bounded Context → Ubiquitous Language (with Domain Experts)
- Subdomains to deal with unbounded complexity of Legacy Systems
- Context Mapping between Bounded Contexts (both team relationships and technical mechanisms)
Tactical Design:
- DDD is about modeling your domain in the most explicit way possible.
- Aggregate Pattern to group entities and value objects together into the right-sized cluster
- Domain Events to share what has occurred within a model with other systems that may be interested in it (both within the Bounded Context as well as outside it)