Strategic Domain Driven Design - SoCraTesUK/socrates-uk GitHub Wiki

The essence of DDD is

  1. capturing a model of the domain
  2. embedding it in the code
  3. 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]