Kapitola 00 · Úvod · Předmluva

Předmluva

Co je tato kniha, pro koho je, jak je strukturovaná a jak ji číst podle role čtenáře.

Autor M. Katuščák
Doba čtení ≈ 8 min
Náročnost základní
Publikováno · Aktualizováno ·
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 – OrderService má 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.
  • Poslední je vývojář migrující z CRUD aplikace na DDD – v produkci má 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, Ságá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. Kapitoly 1 a 2 dají první signál – jestli má váš projekt dost komplexní doménu a kde leží jeho Core. Úplný rámec s rozhodovacím stromem obsahuje kapitola Kdy DDD nepoužívat. Signál „ne“ si zaslouží ověření právě tam, než odložíte zbytek knihy.

Čá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 odpovídá na otázku, 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. Kapitola shrnuje, 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. Na implementaci si zatím netroufnete – ta 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 DDDZákladní konceptyNávrh agregátuImplementace v SymfonyCQRSAnti-vzoryPřípadová studie.

Pro architekta

Strategie a velký obraz. Méně kódu, víc rozhodnutí.

Pro tech leada

Kombinace organizační optiky a praktických problémů.

Pro vývojáře migrujícího z CRUD

Konkrétní cesta, jak existující projekt postupně transformovat.

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). 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ů. Modrý note přidává kontext nebo odkaz na hlubší zdroj. Zelený pattern doporučuje vzor s konkrétním kódem, oranžový warn upozorňuje na riziko nebo častou chybu. Červený anti označuje anti-vzor, kterému se vyhnout.

Diagramy

Diagramy vznikají z PlantUML zdrojů a do textu se vkládají jako SVG. Pokud diagram potřebujete převzít, .puml zdroje jsou k dispozici v repozitáři knihy.

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 u řady kapitol souhrnně v závěrečné sekci s další četbou. 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. Rozhodovací rámec pro opačný závěr nabízí kapitola Kdy DDD nepoužívat.

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éž.