SlideShare a Scribd company logo
1 of 49
Download to read offline
Symfony + DDD + CQRS != Event Sourcing

Clean architecture
Jan Mikeš
#PEHAPKARI

08.09.2022
@honza_mikes
▸ "Software architecture is about making fundamental
structural choices that are costly to change once
implemented."
▸ Paralela k architektuře budov - předpis pravidel, která by se
měla dodržovat
▸ "architektura po čestku" - dělej to takhle, protože to takhle
děláme už dlouho
Co je to softwarová architektura?
Nikdy slepě nekopírujte 1:1
bez odpovědí na otázky PROČ
▸ Agilita - umět rychle reagovat na měnící se požadavky
(byznys, technické, organizační)
▸ Škálovatelnost
▸ Testovatelnost (TDD)
▸ Transparentnost
▸ Framework agnostic modelová vrstva (DDD)
▸ Jednotná konvence (adresářová struktura, naming)
Co JÁ od architektury očekávám
▸ Vysoce konkurenční startupové prostředí
▸ Pocit naplnění a radosti "uživatelů" (programátorů)
▸ Nestydět se za svou práci
▸ Continuous Deployment
▸ Léta praxe, pocitově je to takto fajn
Proč tyto požadavky?
▸ Aplikace nemá testy, protože se špatně testuje
▸ Aplikace je pomalá a optimalizace složitá
▸ Doručování funkcionalit trvá dlouho (přestřelené deadliny)
▸ Problematické upgrady kvůli kompatibilitě
▸ Extrémně náročně změny v tech stacku
Častá realita
▸ Vrstvy s jasně definovanou zodpovědností
▸ CQRS (Doctrine DBAL + ORM)
▸ Command bus pattern (Symfony Messenger)
▸ DDD
▸ Co nejméně magie
▸ TDD
Moje oblíbená kombinace
Co je to CQRS?
CQRS je zkratka pro oddělení odpovědnosti příkazů a dotazů,
vzor, který odděluje operace čtení a aktualizace úložiště dat.
Implementace CQRS ve vaší aplikaci může maximalizovat
výkon, škálovatelnost a zabezpečení. Flexibilita vytvořená
migrací na CQRS umožňuje systému lépe se v průběhu času
vyvíjet a zabraňuje tomu, aby příkazy aktualizace způsobovaly
konflikty při slučování na úrovni domény.
CQRS
Command Query Responsibility Segregation
https://martinfowler.com/bliki/CQRS.html
https://martinfowler.com/bliki/CQRS.html
▸ Kontrola duplicity e-mailu
▸ Uložit do databáze
▸ Poslat welcome e-mail
Jednoduchý use case
Registrace uživatele
▸ Kontrola duplicity e-mailu
▸ Uložit do databáze
▸ Poslat welcome e-mail
▸ Ručně v konzoli
Jednoduchý use case
Registrace uživatele
▸ Vzít informace ze HTTP requestu a poslat je do domény
▸ Vracet response (json, html,..)
Zodpovědnosti controlleru
▸ Vzít informace ze vstupu a poslat je do domény
▸ Výstup s informací o výsledku
Zodpovědnosti console
commandu
▸ Controllery, console commandy
▸ Use cases (messenger handlery)
▸ Event subscribery (messenger handlery)
▸ Entity (aggregate roots)
▸ Commandy, Eventy (DTO)
▸ Value objekty
▸ Query objekty
▸ Formuláře (symfony form builder)
▸ Request, response objekty (DTO)
▸ Doménové služby
▸ Validační služby
▸ Exceptions
▸ Konfigurační soubory
Stavební kameny aplikace
▸ Framework
▸ Aplikační / Entrypointy
▸ Doména
▸ Use cases
▸ Infrastruktura
Vrstvy aplikace
▸ Entrypoint - vstupní bod aplikace
▸ Aplikační - předat data do domény + prezentace uživateli
▸ Doména - vaše byznys logika!
▸ Infrastruktura - implementace pro konkrétní technologii
Jasné zodpovědnosti vrstev
▸ Vždy se snažit hlídat strojově v CI!!!
▸ Deptrac
▸ carlosas/phpat
▸ DaveLiddament/php-language-extensions
▸ Vlastní PHPStan extensions + custom rules
Nástroje a balíčky
Write model
Read model
THANK YOU!
janmikes.cz
@honza_mikes

More Related Content

Similar to PHP App architecture - Symfony + DDD + CQRS

Microsoft Azure – Směr, jak změnit pohled na IT
Microsoft Azure – Směr, jak změnit pohled na ITMicrosoft Azure – Směr, jak změnit pohled na IT
Microsoft Azure – Směr, jak změnit pohled na ITMarketingArrowECS_CZ
 
Spusťte si existující VMware infrastrukturu v Cloudu bez jakékoliv změny
Spusťte si existující VMware infrastrukturu v Cloudu bez jakékoliv změnySpusťte si existující VMware infrastrukturu v Cloudu bez jakékoliv změny
Spusťte si existující VMware infrastrukturu v Cloudu bez jakékoliv změnyMarketingArrowECS_CZ
 
Migrace do Data Centra
Migrace do Data CentraMigrace do Data Centra
Migrace do Data CentraOnlio
 
Pracovní snídaně: Zavádíme integrační platformu v 75 minutách
Pracovní snídaně: Zavádíme integrační platformu v 75 minutáchPracovní snídaně: Zavádíme integrační platformu v 75 minutách
Pracovní snídaně: Zavádíme integrační platformu v 75 minutáchProfinit
 
Přínosy správy mobilních zařízení a desktopové virtualizace
Přínosy správy mobilních zařízení a desktopové virtualizacePřínosy správy mobilních zařízení a desktopové virtualizace
Přínosy správy mobilních zařízení a desktopové virtualizaceMarketingArrowECS_CZ
 
Migrace do Atlassian cloudu z Jira Server Data Center a Confluence
Migrace do Atlassian cloudu z Jira Server Data Center a ConfluenceMigrace do Atlassian cloudu z Jira Server Data Center a Confluence
Migrace do Atlassian cloudu z Jira Server Data Center a ConfluenceOnlio
 
20091202 Aplikované nástroje SW inženýra
20091202 Aplikované nástroje SW inženýra20091202 Aplikované nástroje SW inženýra
20091202 Aplikované nástroje SW inženýraJiří Mareš
 
Oracle Ravello: Přesuňte si prostředí VMware & KVM do cloudu
Oracle Ravello: Přesuňte si prostředí VMware & KVM do clouduOracle Ravello: Přesuňte si prostředí VMware & KVM do cloudu
Oracle Ravello: Přesuňte si prostředí VMware & KVM do clouduMarketingArrowECS_CZ
 
ITSM - Jira Service Desk a spřátelené aplikace z rodiny Atlassian
ITSM - Jira Service Desk a spřátelené aplikace z rodiny AtlassianITSM - Jira Service Desk a spřátelené aplikace z rodiny Atlassian
ITSM - Jira Service Desk a spřátelené aplikace z rodiny AtlassianOnlio
 
2019 03-20 snidane-serie-kuchyne-full
2019 03-20 snidane-serie-kuchyne-full2019 03-20 snidane-serie-kuchyne-full
2019 03-20 snidane-serie-kuchyne-fullProfinit
 
Veeam – Jak zařídit mimořádnou dostupnost dat při jejich neustálém růstu?
Veeam – Jak zařídit mimořádnou dostupnost dat při jejich neustálém růstu?Veeam – Jak zařídit mimořádnou dostupnost dat při jejich neustálém růstu?
Veeam – Jak zařídit mimořádnou dostupnost dat při jejich neustálém růstu?MarketingArrowECS_CZ
 
2019 09-23-snidane qa-public
2019 09-23-snidane qa-public2019 09-23-snidane qa-public
2019 09-23-snidane qa-publicProfinit
 
Jak zefektivnit vaši serverovou virtualizaci
Jak zefektivnit vaši serverovou virtualizaciJak zefektivnit vaši serverovou virtualizaci
Jak zefektivnit vaši serverovou virtualizaciMarketingArrowECS_CZ
 
Webinář: Vylepšete ochranu virtuální infrastruktury - Veeam Backup & Replication
Webinář: Vylepšete ochranu virtuální infrastruktury - Veeam Backup & ReplicationWebinář: Vylepšete ochranu virtuální infrastruktury - Veeam Backup & Replication
Webinář: Vylepšete ochranu virtuální infrastruktury - Veeam Backup & ReplicationJaroslav Prodelal
 
MS Awards Brozura 2015 210x210 R7 LR
MS Awards Brozura 2015 210x210 R7 LRMS Awards Brozura 2015 210x210 R7 LR
MS Awards Brozura 2015 210x210 R7 LRJaromir Sponar
 
Webinář: Co nového přináší verze 9 jedničky v zálohování Veeam Backup & Repli...
Webinář: Co nového přináší verze 9 jedničky v zálohování Veeam Backup & Repli...Webinář: Co nového přináší verze 9 jedničky v zálohování Veeam Backup & Repli...
Webinář: Co nového přináší verze 9 jedničky v zálohování Veeam Backup & Repli...Jaroslav Prodelal
 
End User Computing od VMware v kostce
End User Computing od VMware v kostceEnd User Computing od VMware v kostce
End User Computing od VMware v kostceMarketingArrowECS_CZ
 

Similar to PHP App architecture - Symfony + DDD + CQRS (20)

Microsoft Azure – Směr, jak změnit pohled na IT
Microsoft Azure – Směr, jak změnit pohled na ITMicrosoft Azure – Směr, jak změnit pohled na IT
Microsoft Azure – Směr, jak změnit pohled na IT
 
TNPW2-2012-08
TNPW2-2012-08TNPW2-2012-08
TNPW2-2012-08
 
Spusťte si existující VMware infrastrukturu v Cloudu bez jakékoliv změny
Spusťte si existující VMware infrastrukturu v Cloudu bez jakékoliv změnySpusťte si existující VMware infrastrukturu v Cloudu bez jakékoliv změny
Spusťte si existující VMware infrastrukturu v Cloudu bez jakékoliv změny
 
Migrace do Data Centra
Migrace do Data CentraMigrace do Data Centra
Migrace do Data Centra
 
Pracovní snídaně: Zavádíme integrační platformu v 75 minutách
Pracovní snídaně: Zavádíme integrační platformu v 75 minutáchPracovní snídaně: Zavádíme integrační platformu v 75 minutách
Pracovní snídaně: Zavádíme integrační platformu v 75 minutách
 
Přínosy správy mobilních zařízení a desktopové virtualizace
Přínosy správy mobilních zařízení a desktopové virtualizacePřínosy správy mobilních zařízení a desktopové virtualizace
Přínosy správy mobilních zařízení a desktopové virtualizace
 
TNPW2-2013-08
TNPW2-2013-08TNPW2-2013-08
TNPW2-2013-08
 
Cloud Computing
Cloud ComputingCloud Computing
Cloud Computing
 
Migrace do Atlassian cloudu z Jira Server Data Center a Confluence
Migrace do Atlassian cloudu z Jira Server Data Center a ConfluenceMigrace do Atlassian cloudu z Jira Server Data Center a Confluence
Migrace do Atlassian cloudu z Jira Server Data Center a Confluence
 
20091202 Aplikované nástroje SW inženýra
20091202 Aplikované nástroje SW inženýra20091202 Aplikované nástroje SW inženýra
20091202 Aplikované nástroje SW inženýra
 
Oracle Ravello: Přesuňte si prostředí VMware & KVM do cloudu
Oracle Ravello: Přesuňte si prostředí VMware & KVM do clouduOracle Ravello: Přesuňte si prostředí VMware & KVM do cloudu
Oracle Ravello: Přesuňte si prostředí VMware & KVM do cloudu
 
ITSM - Jira Service Desk a spřátelené aplikace z rodiny Atlassian
ITSM - Jira Service Desk a spřátelené aplikace z rodiny AtlassianITSM - Jira Service Desk a spřátelené aplikace z rodiny Atlassian
ITSM - Jira Service Desk a spřátelené aplikace z rodiny Atlassian
 
2019 03-20 snidane-serie-kuchyne-full
2019 03-20 snidane-serie-kuchyne-full2019 03-20 snidane-serie-kuchyne-full
2019 03-20 snidane-serie-kuchyne-full
 
Veeam – Jak zařídit mimořádnou dostupnost dat při jejich neustálém růstu?
Veeam – Jak zařídit mimořádnou dostupnost dat při jejich neustálém růstu?Veeam – Jak zařídit mimořádnou dostupnost dat při jejich neustálém růstu?
Veeam – Jak zařídit mimořádnou dostupnost dat při jejich neustálém růstu?
 
2019 09-23-snidane qa-public
2019 09-23-snidane qa-public2019 09-23-snidane qa-public
2019 09-23-snidane qa-public
 
Jak zefektivnit vaši serverovou virtualizaci
Jak zefektivnit vaši serverovou virtualizaciJak zefektivnit vaši serverovou virtualizaci
Jak zefektivnit vaši serverovou virtualizaci
 
Webinář: Vylepšete ochranu virtuální infrastruktury - Veeam Backup & Replication
Webinář: Vylepšete ochranu virtuální infrastruktury - Veeam Backup & ReplicationWebinář: Vylepšete ochranu virtuální infrastruktury - Veeam Backup & Replication
Webinář: Vylepšete ochranu virtuální infrastruktury - Veeam Backup & Replication
 
MS Awards Brozura 2015 210x210 R7 LR
MS Awards Brozura 2015 210x210 R7 LRMS Awards Brozura 2015 210x210 R7 LR
MS Awards Brozura 2015 210x210 R7 LR
 
Webinář: Co nového přináší verze 9 jedničky v zálohování Veeam Backup & Repli...
Webinář: Co nového přináší verze 9 jedničky v zálohování Veeam Backup & Repli...Webinář: Co nového přináší verze 9 jedničky v zálohování Veeam Backup & Repli...
Webinář: Co nového přináší verze 9 jedničky v zálohování Veeam Backup & Repli...
 
End User Computing od VMware v kostce
End User Computing od VMware v kostceEnd User Computing od VMware v kostce
End User Computing od VMware v kostce
 

PHP App architecture - Symfony + DDD + CQRS

  • 1. Symfony + DDD + CQRS != Event Sourcing
 Clean architecture Jan Mikeš #PEHAPKARI
 08.09.2022 @honza_mikes
  • 2. ▸ "Software architecture is about making fundamental structural choices that are costly to change once implemented." ▸ Paralela k architektuře budov - předpis pravidel, která by se měla dodržovat ▸ "architektura po čestku" - dělej to takhle, protože to takhle děláme už dlouho Co je to softwarová architektura?
  • 3. Nikdy slepě nekopírujte 1:1 bez odpovědí na otázky PROČ
  • 4. ▸ Agilita - umět rychle reagovat na měnící se požadavky (byznys, technické, organizační) ▸ Škálovatelnost ▸ Testovatelnost (TDD) ▸ Transparentnost ▸ Framework agnostic modelová vrstva (DDD) ▸ Jednotná konvence (adresářová struktura, naming) Co JÁ od architektury očekávám
  • 5. ▸ Vysoce konkurenční startupové prostředí ▸ Pocit naplnění a radosti "uživatelů" (programátorů) ▸ Nestydět se za svou práci ▸ Continuous Deployment ▸ Léta praxe, pocitově je to takto fajn Proč tyto požadavky?
  • 6.
  • 7. ▸ Aplikace nemá testy, protože se špatně testuje ▸ Aplikace je pomalá a optimalizace složitá ▸ Doručování funkcionalit trvá dlouho (přestřelené deadliny) ▸ Problematické upgrady kvůli kompatibilitě ▸ Extrémně náročně změny v tech stacku Častá realita
  • 8. ▸ Vrstvy s jasně definovanou zodpovědností ▸ CQRS (Doctrine DBAL + ORM) ▸ Command bus pattern (Symfony Messenger) ▸ DDD ▸ Co nejméně magie ▸ TDD Moje oblíbená kombinace
  • 9. Co je to CQRS?
  • 10.
  • 11. CQRS je zkratka pro oddělení odpovědnosti příkazů a dotazů, vzor, který odděluje operace čtení a aktualizace úložiště dat. Implementace CQRS ve vaší aplikaci může maximalizovat výkon, škálovatelnost a zabezpečení. Flexibilita vytvořená migrací na CQRS umožňuje systému lépe se v průběhu času vyvíjet a zabraňuje tomu, aby příkazy aktualizace způsobovaly konflikty při slučování na úrovni domény. CQRS Command Query Responsibility Segregation
  • 14.
  • 15. ▸ Kontrola duplicity e-mailu ▸ Uložit do databáze ▸ Poslat welcome e-mail Jednoduchý use case Registrace uživatele
  • 16.
  • 17.
  • 18. ▸ Kontrola duplicity e-mailu ▸ Uložit do databáze ▸ Poslat welcome e-mail ▸ Ručně v konzoli Jednoduchý use case Registrace uživatele
  • 19.
  • 20.
  • 21. ▸ Vzít informace ze HTTP requestu a poslat je do domény ▸ Vracet response (json, html,..) Zodpovědnosti controlleru
  • 22. ▸ Vzít informace ze vstupu a poslat je do domény ▸ Výstup s informací o výsledku Zodpovědnosti console commandu
  • 23.
  • 24.
  • 25.
  • 26. ▸ Controllery, console commandy ▸ Use cases (messenger handlery) ▸ Event subscribery (messenger handlery) ▸ Entity (aggregate roots) ▸ Commandy, Eventy (DTO) ▸ Value objekty ▸ Query objekty ▸ Formuláře (symfony form builder) ▸ Request, response objekty (DTO) ▸ Doménové služby ▸ Validační služby ▸ Exceptions ▸ Konfigurační soubory Stavební kameny aplikace
  • 27. ▸ Framework ▸ Aplikační / Entrypointy ▸ Doména ▸ Use cases ▸ Infrastruktura Vrstvy aplikace
  • 28.
  • 29. ▸ Entrypoint - vstupní bod aplikace ▸ Aplikační - předat data do domény + prezentace uživateli ▸ Doména - vaše byznys logika! ▸ Infrastruktura - implementace pro konkrétní technologii Jasné zodpovědnosti vrstev
  • 30. ▸ Vždy se snažit hlídat strojově v CI!!! ▸ Deptrac ▸ carlosas/phpat ▸ DaveLiddament/php-language-extensions ▸ Vlastní PHPStan extensions + custom rules Nástroje a balíčky
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.