Předmluva
Co je tato kniha, pro koho je, jak je strukturovaná a jak ji číst podle role čtenáře.
Obsah kapitoly
Tato kniha vznikla z opakované zkušenosti: vývojář otevře Domain-Driven Design: Tackling Complexity in the Heart of Software od Erica Evanse, přečte 560 stran teorie a zavře knihu se dvěma otázkami. Kde začít? A jak to konkrétně udělat v Symfony? Mezi originálním textem z roku 2003 a praktickým PHP projektem v roce 2026 leží silná vrstva implementačních detailů, kterou Evans nemohl pokrýt. Vaughn Vernon ji v Implementing Domain-Driven Design (2013) zaplnil pro Javu a C#. Pro PHP a Symfony zatím podobně systematická kniha nebyla.
Cílem této knihy je tu mezeru zaplnit. Začínáme tím, kdy DDD vůbec dává smysl, pokračujeme přes strategický a taktický design až po konkrétní Symfony 8 kód s Doctrine ORM, Symfony Messenger a PHP 8.4. Každá kapitola obsahuje funkční ukázky, které můžete převzít do svého projektu, ne jen pseudokód.
P.01 Pro koho je tato kniha
Kniha předpokládá zkušenost s PHP a Symfony, objektově orientovaným programováním a základními designovými vzory. Nepředpokládá zkušenost s DDD. Pokud znáte Symfony Controller, Doctrine entitu, Dependency Injection a chápete rozdíl mezi interface a abstraktní třídou, máte vše potřebné.
Kniha je psaná pro pět typických rolí:
- Senior PHP developer, který v projektu narazil na limity klasické vrstvené architektury –
OrderServicemá 1500 řádků, každá nová feature způsobí regresi v jiné oblasti, onboarding nového kolegy trvá měsíce. - Symfony developer, který si všiml, že větší projekty „rostou“ jinak než malé, a hledá strukturovanější přístup než jen Controller-Service-Repository.
- Architekt, který stojí před rozhodnutím, jaký přístup k modelování doménové logiky zvolit – DDD, klasické CRUD, modulární monolit, nebo microservices.
- Tech lead, který musí svému týmu vysvětlit, proč a jak DDD zavést, a hledá argumenty pro management v termínech DORA metrik a obchodní hodnoty.
- Vývojář migrující z CRUD aplikace na DDD, který má v produkci spaghetti kód a hledá inkrementální cestu ven.
Pro každou roli kniha nabízí jinou doporučenou cestu čtení – viz P.03 Jak číst tuto knihu.
Co tato kniha není
- Ne úvod do PHP nebo Symfony. Pokud Symfony vidíte poprvé, projděte nejprve oficiální Symfony dokumentaci.
- Ne kuchařka „kopíruj-vlož“. Kód v knize ilustruje vzory v kontextu, ne hotová řešení pro váš konkrétní projekt. DDD vyžaduje úsudek nad doménou, ne mechanickou aplikaci šablon.
- Ne kompletní reference DDD. Pro hlubší teoretický základ čtěte Evanse (2003), Vernona (2013) a Khononova (2021) – odkazy na konkrétní pasáže najdete na konci každé kapitoly.
- Ne návod, jak prosadit DDD u nepřesvědčeného managementu. Argumenty pro DDD jsou v knize, ale rozhodnutí závisí na konkrétním kontextu organizace.
Předpoklady
Kniha předpokládá tyto výchozí znalosti:
- PHP 8.1+: atributy (
#[Attribute]), enums, readonly properties, named arguments,match. Některé příklady používají PHP 8.4 (asymmetric visibility, property hooks). - Symfony 6+: Service Container, Dependency Injection, Doctrine ORM, Symfony Messenger, atributy
#[Route],#[AsMessageHandler]. Většina kódu cílí na Symfony 8. - Objektově orientované programování: dědičnost vs. kompozice, polymorfismus, zapouzdření, SOLID principy.
- Designové vzory: Repository, Factory, Strategy, Observer. Není nutné je znát formálně, ale měli byste je v kódu poznat.
- Relační databáze: ACID, transakce, indexy, JOIN, optimistický a pesimistický zámek.
Pokud některý z bodů „nesedí“, neznamená to, že knihu nemůžete číst – jen u některých kapitol budete potřebovat víc soustředění. Kapitoly o Event Sourcingu, Sagách a microservices jsou nejnáročnější.
P.02 Co kniha pokrývá
Kniha je rozdělená do osmi tematických částí. Pořadí kapitol je promyšlené – každá staví na předchozích – ale pro většinu rolí dává smysl číst selektivně podle vlastních potřeb.
Část 1 – Strategický design (kap. 1–5)
Strategický design rozhoduje, kde DDD vůbec aplikovat. Pokrývá filozofii DDD, Ubiquitous Language, identifikaci subdomén (Core, Supporting, Generic), Bounded Contexts a Context Mapping. Doplňují ho dvě praktické techniky: Event Storming Alberta Brandoliniho a Team Topologies (Skelton & Pais, 2019), bez kterých strategický design nefunguje v reálné organizaci.
Zde se rozhoduje, jestli má smysl pokračovat. Pokud z kapitoly 1 a 2 vyjde, že váš projekt nemá dost komplexní doménu pro DDD, ostatní kapitoly nejsou potřeba.
Část 2 – Taktický design (kap. 6–9)
Taktický design pokrývá konkrétní stavební bloky doménového modelu: entity, hodnotové objekty, agregáty, repozitáře, doménové služby, doménové události. Středobodem taktické části je kapitola 7 o návrhu agregátu. Hranice agregátu je nejtěžší rozhodnutí v taktickém DDD a chyba zde stojí násobně víc než chyba v jednotlivé třídě.
Doplňující taktické vzory (Specification Pattern, Factory, Module) a srovnání architektonických stylů (Hexagonal, Onion, Clean Architecture) uzavírají taktickou část.
Část 3 – Implementace v Symfony (kap. 10–11)
Konkrétní mapování DDD do Symfony 8: adresářová struktura podle Bounded Contexts, vlastní Doctrine typy pro hodnotové objekty, Symfony Messenger jako Command/Query Bus, Dependency Injection a autowiring.
Kapitola 11 řeší autorizaci ve čtyřech vrstvách – Edge (firewall), Use Case (Voter), Aggregate (doménový invariant), Field (read model filtrace).
Část 4 – Pokročilé vzory (kap. 12–15)
CQRS (oddělení čtení a zápisu), Event Sourcing (stav jako sekvence událostí), Ságy a Process Managery (dlouho běžící procesy s kompenzací), Outbox Pattern (spolehlivé doručení doménových událostí).
Tyto vzory nejsou pro každý projekt. Kapitoly začínají rozhodovacím rámcem „kdy ano a kdy ne“.
Část 5 – Výkon a testování (kap. 16–17)
Výkonové aspekty (N+1 problém, lazy loading, read modely, snapshoty, hot aggregates) a testovací strategie (unit testy doménové vrstvy, integrační testy s Doctrine, architektonické testy s Deptrac/PHPArkitect).
Část 6 – Migrace a microservices (kap. 18–19)
Postupný přechod z CRUD architektury na DDD pomocí Strangler Fig Pattern. Vztah Bounded Context vs. microservice – kdy 1:1 dává smysl, kdy modulární monolit poráží distribuované služby a jak rozeznat distributed monolith včas.
Část 7 – Provozní problémy a anti-vzory (kap. 20–22)
Tři kapitoly s odlišným úhlem na to, co se v DDD pokazí. Kapitola 20 pokrývá konkrétní provozní třenice s Doctrine, Messenger a Symfony Form. Kapitola 21 je katalog kódových anti-vzorů (anémický model, Primitive Obsession, God Aggregate, sdílená databáze). Kapitola 22 je rozhodovací rámec, kdy DDD vůbec nepoužívat.
Část 8 – Praktické příklady (kap. 23–24)
Tři krátké příklady (e-shop, blog, správa uživatelů) jako shrnující průřez. Závěrečná případová studie popisuje implementaci systému pro správu projektů krok za krokem – od doménové analýzy přes architekturu, agregáty, CQRS až po read modely s reconciliation.
Pozn.: Mimo hlavní řadu kapitol existuje na webu ještě DDD a umělá inteligence – přehled toho, co o vztahu DDD a AI říkají Eric Evans, Martin Fowler, Kent Beck a další. V tištěné a EPUB verzi knihy tato kapitola není, protože téma se v posledních letech intenzivně vyvíjí a aktualizace na webu jsou pružnější.
P.03 Jak číst tuto knihu
Lineární čtení od první do poslední kapitoly funguje, ale málokdo ho potřebuje. Většina čtenářů má konkrétní bolest, kvůli které knihu otevřela. Pět doporučených cest podle role:
Pro junior PHP developera
Cíl: pochopit, co DDD je, a naučit se ho rozeznat v cizím kódu. Implementaci si zatím netroufnete – to přijde až s druhým a třetím projektem. Doporučená cesta v pořadí čtení:
- Co je DDD – filozofie, klíčové pojmy, kdy DDD pomůže.
- Základní koncepty DDD – entity, hodnotové objekty, agregáty, repozitáře. Nejdůležitější mentální model celé knihy.
- Návrh agregátu – jak agregát udělat dobře. Nejtěžší kapitola taktického designu, ale stojí to za to.
- Implementace v Symfony – konkrétní kód, který můžete dnes použít.
- Testování DDD – jak ověřit, že to funguje.
Volitelně po měsíci praxe: CQRS a Anti-vzory.
Pro senior PHP developera
Lineární čtení od kapitoly 1 do 24. Pokud chcete postupovat rychleji, projděte strategickou část (kap. 1–5) a taktickou část (kap. 6–9), pak vyberte pokročilé vzory (kap. 12–15) podle aktuálního projektu.
Rychlá cesta: Co je DDD → Základní koncepty → Návrh agregátu → Implementace v Symfony → CQRS → Anti-vzory → Případová studie.
Pro architekta
Strategie a velký obraz. Méně kódu, víc rozhodnutí.
- Co je DDD – pro kontext.
- Subdomény: Core, Supporting, Generic – první strategický filtr.
- Bounded Context a Context Mapping – jak nakreslit mapu vztahů mezi kontexty.
- Conway's Law a Team Topologies – architektura kopíruje organizaci.
- Migrace z CRUD – Strangler Fig pro postupný přechod.
- DDD a microservices – fyzické hranice nasazení.
- Anti-vzory – co dělat, abychom se vyhnuli klasickým chybám.
- Kdy DDD nepoužívat – věcný rozhodovací rámec.
- Případová studie – inspirace pro vlastní projekt.
Pro tech leada
Kombinace organizační optiky a praktických problémů.
- Conway's Law a Team Topologies – jak týmovou strukturou ovlivnit architekturu.
- Event Storming a Domain Storytelling – workshop, který zavedete do týmu.
- Migrace z CRUD – jak postupně přejít bez velké přestávky.
- DDD v praxi – kde to bolí – co očekávat a jak s tím pracovat.
- Anti-vzory – kódové signály, které v code review hledat.
- Kdy DDD nepoužívat – kdy říct ne.
Pro vývojáře migrujícího z CRUD
Konkrétní cesta, jak existující projekt postupně transformovat.
- Co je DDD – ujistit se, že vůbec dává smysl.
- Kdy DDD nepoužívat – věcná kontrola, jestli to není chyba.
- Subdomény – kde investovat modelovací úsilí.
- Základní koncepty – výchozí slovník.
- Návrh agregátu – nejdůležitější taktický vzor.
- Migrace z CRUD na DDD – Strangler Fig Pattern v Symfony.
- DDD v praxi – kde to bolí – realistická očekávání.
Po této sekvenci selektivně další kapitoly podle konkrétní bolesti, kterou v aplikaci pociťujete.
P.04 Konvence v knize
Konvence v této sekci platí napříč všemi kapitolami.
Hlas a tón
Kniha používá vykání. Věty jsou krátké a jedna věta říká jednu věc. Žádný marketingový jazyk – místo „mocný framework“ stojí v textu konkrétně, co Symfony Messenger umí a co ne. Žádné osobní komentáře autora, žádné nadsázky.
Styl kódu
Kód cílí na PHP 8.4 a Symfony 8 s Doctrine ORM 3. Některé příklady používají rysy z PHP 8.4 (asymmetric visibility, property hooks, readonly properties). Pokud váš projekt běží na starší verzi, princip zůstává platný, jen syntaxe je jiná.
Atributy Doctrine (#[ORM\Entity]) jsou na doménových třídách jako pragmatická výchozí volba. Pro striktní oddělení doménové vrstvy od ORM existuje Persisted Object Pattern – samostatná persistence třída plus mapper. Většina příkladů v knize používá první variantu, protože v reálných Symfony projektech je rozšířenější.
Callouty
Kniha používá čtyři typy callout boxů:
- Note (modrý) – informace navíc, kontext, odkaz na hlubší zdroj.
- Pattern (zelený) – doporučený vzor s konkrétním kódem.
- Warn (oranžový) – riziko, past nebo častá chyba.
- Anti (červený) – anti-vzor, kterému se aktivně vyhnout.
Diagramy
Diagramy jsou v PlantUML zdrojovém formátu v templates/diagrams/, vyrenderované do SVG a vložené do textu. Pokud diagram potřebujete převzít, najdete .puml zdroj ve stejné složce jako SVG.
Vnitřní odkazy
Vnitřní odkazy mezi kapitolami používají cesty (/co-je-ddd, /zakladni-koncepty), ne čísla kapitol. Přečíslování tak odkazy nezneplatní. Externí odkazy na knihy a články používají plný URL.
Citace
Knihy a referenční články jsou citované přímo v textu (např. „Vernon, Implementing DDD, kap. 8“) a souhrnně na konci každé kapitoly v sekci „Další četba“. Hlavní zdroje, na které kniha staví:
- Eric Evans, Domain-Driven Design: Tackling Complexity in the Heart of Software (Addison-Wesley, 2003).
- Vaughn Vernon, Implementing Domain-Driven Design (Addison-Wesley, 2013) a Domain-Driven Design Distilled (2016).
- Vlad Khononov, Learning Domain-Driven Design (O'Reilly, 2021).
- Sam Newman, Building Microservices, 2nd ed. (O'Reilly, 2021).
- Chris Richardson, Microservices Patterns (Manning, 2018).
- Matthew Skelton & Manuel Pais, Team Topologies (IT Revolution, 2019).
- Martin Fowler, Patterns of Enterprise Application Architecture (Addison-Wesley, 2002).
P.05 Co dál
Pokud jste tu poprvé, otevřete kapitolu 1: Co je DDD. Po přečtení byste měli mít jasno, jestli má smysl pokračovat.
Pokud DDD už znáte a hledáte konkrétní téma, projděte si Cheat Sheet – jednostránkový přehled vzorů s odkazy na příslušné kapitoly. Pro definice termínů slouží Glosář.
Kniha je živý dokument. Aktuální verze, errata a komentáře čtenářů najdete na ddd-v-symfony.cz. Připomínky a opravy vítám na adrese uvedené tamtéž.