Reference · DDD Cheat Sheet

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.

Autor M. Katuščák
Publikováno · Aktualizováno ·
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:

  1. 01 – Co je DDD
  2. 06 – Základní koncepty
  3. 10 – Vertical Slice Architecture
  4. 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:

  1. 02 – Subdomény
  2. 03 – Bounded Context a Context Mapping
  3. 04 – Event Storming + Domain Storytelling
  4. 05 – Conway's Law a Team Topologies
  5. 09 – Architektonické styly: Hexagonal, Onion, Clean
  6. 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:

  1. 01 – Co je DDD
  2. 04 – Event Storming (objevení implicitní domény)
  3. 06 – Základní koncepty
  4. 07 – Návrh agregátu
  5. 19 – Migrace z CRUD na DDD (vč. Refactoring kuchařky)
  6. 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é:

  1. 13 – CQRS v Symfony
  2. 14 – Event Sourcing
  3. 15 – Sagy a Process Manager
  4. 16 – Outbox Pattern
  5. 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

  1. 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.
  2. 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.
  3. 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ář.