Sessie 3 van 3 van de Itenium CCC Domain-Driven Design track.
ddd-workshop/
├── docs/
│ └── Deelnemer_Handout.md ← deel dit met deelnemers
├── infra/
│ ├── docker-compose.yml ← Postgres 17 + RabbitMQ 4
│ └── postgres-init/ ← schemas warehouse/sales
├── java-stack/ ← Java 25 + Spring Boot 4, Gradle multi-module
└── dotnet-stack/ ← .NET 10 + C# 14 + EF Core 10, solution
Beide stacks tonen dezelfde code-structuur, dezelfde aggregates, dezelfde testscenarios. Kies er één voor jouw groep.
# Eén keer, voor de sessie
docker compose -f infra/docker-compose.yml up -d
# Java
cd java-stack && ./gradlew test
# .NET
cd dotnet-stack && dotnet testAls beide groen zijn, ben je klaar om te beginnen.
Een ijskarbedrijf. Twee bounded contexts:
- Warehouse — voorraad per smaak, reserveringen, pickups, retours. Volledig geïmplementeerd als worked example.
- Sales — de
Verkoopronde(sales round) die een chauffeur met de ijskar de baan op laat gaan. Leeg — dit is wat deelnemers tijdens de sessie bouwen.
De twee contexts communiceren enkel via async events over RabbitMQ — ze importeren elkaars packages niet.
- Een aggregate schrijven die invariants afdwingt, zonder framework-leaks.
- Een application-service schrijven die load → command → save → publish orkestreert in één transactie.
- Drie niveaus van tests: domain (pure, snel), application (fake adapters), integration (Testcontainers), acceptance (hele stack).
- Waarom cross-context communicatie async moet, en hoe je dat oplost met één regel routing per event-type.
Deze sessie bouwt voort op:
- Sessie 1 — EventStorming (
event-storming-9-2-26.pptx) - Sessie 2 — DDD Architectuur (
ddd-architectuur.pptx)
Beide decks zaten in de aanvraag en horen in hetzelfde Teams/Drive-kanaal.