rgoussu@goussu: ~/library/applicative-architecture
~/library/applicative-architecture cat ddd.md

DDD

# Domain-Driven Design — modeling software around the business domain, with a ubiquitous language and explicit bounded contexts.

Conceptsaved 2026-08-08 #ddd#design#architecture#modeling

Overview

Domain-Driven Design (Eric Evans) is an approach for tackling complex software by putting the business domain at the center: the code models the domain, the team speaks the domain's language, and large systems are split along domain boundaries. Its strategic patterns (bounded contexts, context mapping) have outlived fashion and underpin how modern systems — including microservices — are decomposed.

Key points

  • Ubiquitous language: one shared vocabulary between domain experts and code — class and method names are domain terms.
  • Strategic design: bounded contexts (a model is only valid within its boundary), context maps (how contexts relate: partnership, ACL, conformist…), core domain vs. supporting/generic subdomains — invest where the business differentiates.
  • Tactical patterns: entities, value objects, aggregates (consistency boundaries), domain events, repositories, domain services, factories.
  • Aggregates are the transactional consistency unit — keep them small; reference other aggregates by identity.
  • Strategic beats tactical: teams that adopt only the building blocks miss the point; boundaries and language carry most of the value.
  • To explore: event storming (Brandolini), CQRS & event sourcing, "Implementing DDD" (Vernon), team topologies as the organizational mirror of context boundaries.

Practice

  • DDD starter modelling process (source) — a guided walk from business model to bounded contexts; do it once on a domain you know cold before trying it on one you don't.
  • Event storming a familiar domain (source) — big-picture storm of your current product or a side project; discover events, commands, and boundary lines before writing any code.
  • Bounded context canvas (source) — fill one per candidate context from the storm; the canvas forces the boundary and language decisions that strategic design lives on.
  • Event-sourced bank account (exercise) — the tactical patterns in code: aggregate as consistency boundary, domain events in the ubiquitous language.

Related