DDD Cheat Sheet
Jednostránková navigace celou knihou. Když si pamatujete jen pojem, najděte ho zde – je tu hyperlink na detail. Když si nejste jisti, který vzor použít, projděte rozhodovací strom. Stránka je bez příkladů – všechno najdete v odkazovaných kapitolách.
Obsah kapitoly
Cheat sheet je doplněk k glosáři a referenčnímu rozcestníku. Cílem je, abyste z jediné stránky našli odkaz na tu část knihy, kterou aktuálně potřebujete – bez nutnosti pamatovat si strukturu obsahu.
cs.01 Rozhodovací strom – co použít, kdy?
Tabulka mapuje typický symptom nebo požadavek na doporučený vzor a vede vás přímo na detailní kapitolu. Není to vyčerpávající rozhodovací strom – jen 14 nejčastějších situací, na které DDD odpovídá konkrétním vzorem.
| Mám problém / situaci | Použij | Detail |
|---|---|---|
| Komplexní doménu, která tvoří jádro byznysu | Plný DDD – taktický + strategický | Co je DDD · Subdomény |
| 2+ Bounded Contexts, které spolu komunikují | Context Map | Context Mapping |
| Legacy systém, který musím konzumovat | Anti-Corruption Layer (ACL) | Context Mapping – ACL |
| Long-running proces s kompenzacemi | Saga / Process Manager | Sagy a Process Manager |
| Stav je sekvence událostí | Event Sourcing | Event Sourcing |
| Oddělené čtení a zápis | CQRS | CQRS v Symfony |
| Zápis state + publish event atomicky | Outbox Pattern | Outbox Pattern |
| Skládatelné doménové pravidlo | Specification Pattern | Specifications |
| Logika, která nepatří do entity | Domain Service | Domain Services |
| Komplexní vznik aggregátu | Factory | Factories |
| Workshop pro objevení domény | Event Storming | Event Storming |
| Reorganizace týmů kolem BC | Team Topologies | Conway's Law a Team Topologies |
| Autorizace na úrovni use case | Symfony Voter | Autorizace – Voter |
| Migrace z CRUD postupně | Strangler Fig Pattern | Migrace z CRUD na DDD |
cs.02 Symfony ↔ DDD mapping (rychlá tabulka)
Krátká verze tabulky pro rychlou orientaci. Plná verze s odkazy na anti-vzory a kapitoly je v glosáři, sekce „Symfony ↔ DDD mapping (rozšířená tabulka)“.
| Symfony konstrukt | DDD pojem | Poznámka |
|---|---|---|
Controller |
Adapter (HTTP boundary) | Nepatří tam doménová logika |
MessageHandler |
Application Service / Use Case | Jeden command = jeden handler |
EventSubscriber (Doctrine/Kernel) |
Infrastructure | Nikoli Domain Event Handler |
| Domain Event Handler (custom) | Domain Service nebo Application Service | Reaguje na doménový event |
Entity (s ORM) |
Aggregate Root nebo Entity (DDD) | Doctrine atributy = leak; preferuj separated mapping |
Repository (Symfony) |
Repository (DDD) | Interface v doméně, implementace v infra |
Voter |
Use case authorization | Ne doménové invarianty |
Service (autowire) |
Application / Domain / Infra Service | Vždy rozlišuj typ! |
Form |
Input mapping | Nevolat aggregate metody přímo |
| Symfony Messenger transport (sync) | In-process command/event bus | Monolith |
| Symfony Messenger transport (async) | Integration channel (cross-BC) | AMQP/Kafka – pro cross-context komunikaci |
cs.03 False friends – slovní pasti
Stejné slovo má v DDD a v Symfony/PHP/SQL světě různý význam. Tabulka shrnuje 7 nejčastějších záměn. Plný slovník s 9 entries a podrobným rozborem najdete v glosáři, sekce „Slovní pasti – false friends“.
| Pojem | V DDD | V Symfony / obecně | Tip |
|---|---|---|---|
| ACL | Anti-Corruption Layer | Access Control List | V DDD literatuře vždy to první |
| Repository | Doménová kolekce agregátů (collection-like) | Doctrine EntityRepository třída |
DDD Repository je interface, Doctrine implementace |
| Service | Stateless objekt (Domain / Application / Infra) | Symfony service (= cokoli v DI) | Vždy kvalifikuj typ |
| Event | Doménová událost (OrderPlaced) |
Symfony EventDispatcher event | Symfony event ≠ Domain event |
| Entity | Objekt s identitou v doméně | Doctrine Entity (ORM mapped) | DDD Entity může být uvnitř Aggregátu |
| Aggregate | Konzistentní cluster objektů | SQL agregační funkce (SUM, COUNT) |
Pojmy se neprolínají; pro juniora to bývá matoucí |
| Domain | Oblast podnikání | Twig translation domain (messages) |
Obvykle myšleno DDD |
cs.04 Reading paths – kdo si má co přečíst
Kniha má přes 25 kapitol; nikdo nemusí číst všechny. Níže jsou 4 doporučené průchody pro typické role a situace. Každý průchod respektuje doporučenou závislost mezi kapitolami – od základů k pokročilému.
Junior PHP developer, první kontakt s DDD
Pokud jste nikdy s DDD nepracovali a chcete pochopit, o co jde, dříve než začnete refaktorovat produkční kód:
- 01 – Co je DDD
- 06 – Základní koncepty
- 10 – Vertical Slice Architecture
- 17 – Read modely, projekce a výkon
Doba čtení: ~2 hodiny. Cíl: rozumět slovníku a vědět, co znamená „aggregate“ / „bounded context“ v code review.
Architekt na novém projektu
Stavíte greenfield projekt a chcete od začátku rozvrhnout strategický design – bounded contexts, topologii týmů, integrační vzory:
- 02 – Subdomény
- 03 – Bounded Context a Context Mapping
- 04 – Event Storming + Domain Storytelling
- 05 – Conway's Law a Team Topologies
- 09 – Architektonické styly: Hexagonal, Onion, Clean
- 20 – DDD a microservices
Doba čtení: ~4 hodiny. Cíl: mít ucelený obraz pro architekturní review a roadmapu.
Migrace existujícího Symfony projektu
Máte produkční CRUD/Symfony aplikaci a chcete ji postupně přesunout k DDD bez big-bang přepisu:
- 01 – Co je DDD
- 04 – Event Storming (objevení implicitní domény)
- 06 – Základní koncepty
- 07 – Návrh agregátu
- 19 – Migrace z CRUD na DDD (vč. Refactoring kuchařky)
- 22 – Anti-vzory
Doba čtení: ~3 hodiny + týdny refaktoringu. Cíl: mít konkrétní plán prvních 5 PRs migrace.
Tech lead před release
Před produkčním release chcete mít jistotu, že stěžejní infrastrukturní vzory (CQRS, ES, Sagas, Outbox) jsou správně postavené a otestované:
- 13 – CQRS v Symfony
- 14 – Event Sourcing
- 15 – Sagy a Process Manager
- 16 – Outbox Pattern
- 18 – Testování v DDD
Doba čtení: ~3 hodiny. Cíl: mít checklist pro release review.
cs.05 Externí zdroje – must-read
Pět knih a tři přednášky, které by měl znát každý, kdo chce DDD používat seriózně. Plnou bibliografii (články, repozitáře, kurzy, komunity, oficiální dokumentace) najdete na samostatné stránce Zdroje a další četba.
Pět knih
| Autor | Titul | Proč |
|---|---|---|
| Eric Evans (2003) | Domain-Driven Design: Tackling Complexity in the Heart of Software | Zakladatelská kniha. Slovník celého oboru. |
| Vaughn Vernon (2013) | Implementing Domain-Driven Design | Praktický druhý díl k Evansovi – implementační vzory a CQRS. |
| Vaughn Vernon (2016) | Domain-Driven Design Distilled | Stručná destilace pro ty, kdo váhají investovat čas do plné Implementing DDD. |
| Vlad Khononov (2021) | Learning Domain-Driven Design | Modernější druhý pohled. Větší důraz na strategický design a rozhodování, kde DDD dává smysl. |
| Greg Young (2010) | CQRS Documents (PDF zdarma) | Původní texty od autora pojmu CQRS. Hutné, definující. |
Tři přednášky
- Eric Evans – Tackling Complexity in the Heart of Software (keynote, ~60 min). Stručnější verze stejnojmenné knihy. Pokud nemáte čas na knihu, projděte alespoň přednášku.
- Greg Young – CQRS and Event Sourcing (konference, ~75 min). Greg Young v ostře praktickém režimu – kdy má smysl rozlišovat command/query a kdy jít až k event-sourced uložišti.
- Jimmy Bogard – Vertical Slice Architecture (konference, ~45 min). Argument pro vertikální slicing místo horizontálních vrstev – podstatné pro organizaci kódu uvnitř Bounded Contextu.
Pokud potřebujete konkrétní implementační příklady, projděte Praktické příklady nebo Implementace DDD v Symfony. Pro hlubší slovník pojmů viz Glosář.