SlideShare ist ein Scribd-Unternehmen logo
1 von 64
Downloaden Sie, um offline zu lesen
Svaťa
Šimara
Read Model
CQRS
Read Model
CQRS
Model
Mapa
Model
• Mentální reprezentace reality
• Pro konkrétní použítí
• Neuniverzální
Konkrétní model
Oproti unierzálnímu
• Snadnější porozumění
• Lépe popisuje use-case
• Více modelů
– Více práce, údržby
Model produktu
Product
Property
Value
0..*
Model produktu
Product
Parent Variant
1..*
Property
Value
0..*
Model produktu
• Doménový model
• Pravidla
• Významy
• Pojmy
Model produktu
• Super na práci s pravidly
– Změny
– Údržba
– Pochpení
Model produktu
• Nevhodný pro vyhledávání
– Složitý
– Pomalý
Řešení pro vyhledávání
Ústupky v modelu
Ústupky v modelu
• Neexistující koncepty
• Složité na pochopení
• „Proč je toto takto?”
– Pokud autor myšlenek odešel,
nikdo neví
Ústupky v modelu
• Změny
– „Neřešitelné” problémy
• 2 modely zároveň
– Doménový
– Rychlý čtecí
Model pro vyhledávání
Model pro vyhledávání
• Podle use-case vyhledávání
• Varianty obsahují přímo vlastnosti
rodičů
• Není rozdíl mezi produktem a
variantou
– Produkt má vždy alespoň
jednu variantu
• ...
Model pro vyhledávání
Product
Variant1..*
Property
Value0..*
Read Model
Read Model
• Další model
• Pro čtecí use-case
• Neočekáváme chování
• Read only
Read Model
Read
Model
Write
Model
Write
Use Cases
Read
Use Cases
Read Model
Read
Model
Write
Model
Write
Use Cases
Read
Use Cases
✔ Model pro čtecí use-case
✗ Performance
Čtecí databáze
Read
Model
Write
Model
Write
Use Cases
Read
Use Cases
Čtecí databáze
✔ Model pro čtecí use-case
✔ Performance
Read
Model
Write
Model
Write
Use Cases
Read
Use Cases
Synchronizace
• Nový prvek systému
– Nové problémy
• Netransakčnost
Read Model ≠ Cache
¿ přestávka ?
Read
Model
Write
Model
Write
Use Cases
Read
Use Cases
Znáte to?
• Web je pomalý
– protože importujeme data
• Máme deadlocky
– takže se nedá importovat
• Web je pomalý,
– protože používáme ORM
CQRS
CQRS
• Command
• Query
• Responsibility
• Separation
CQRS
• Oddělení čtecích a zápisových
zodpovědností
Command
Command
• Jednosměrná akce
– Co se má provést
• Pokyn k vykonání use-case
• Command nic nevrací
– Jednosměrná komunikace
– Akce může odpovědět
vyjímkou
Command
• Vystav fakturu!
• Deaktivuj účet!
• Pošli e-mail k obnovení
zapomenutého hesla!
Command
Command
Bus
UI
API
CLI
Handler
(Write Model)
Command
Command
Command
UI
• UI je zodpovědné za sestavení
commandu a odeslání
• Jasná zodpovědnost
• Testování
Command
Bus
UI
API
CLI
Handler
(Write Model)
Command
UI
Command Bus
• Pro UI rozhraní
• Dispečer commandů
• Pro daný command vykoná daný
handler
• Použijte existující knihovny
Command
Bus
UI
API
CLI
Handler
(Write Model)
Command
Command
Handler
• Obsluha commandu
• Vykonává konkrétní doménový
use-case
• Jasná zodpovědnost
• Testování
Command
Bus
UI
API
CLI
Handler
(Write Model)
Command
Handler
Vše je zřejmé?
Commandy NIC nevrací
Commandy NIC nevrací
Commandy NIC nevrací
Commandy NIC nevrací
• Generování ID dopředu
• UUID
Commandy NIC nevrací
¿ přestávka ?
Query
Query
Query
• Dotaz na data
• Nikdy nemění stav
– Nikdy
– Nikdy
– Nikdy
Query
• Přesně pro potřeby UI
• Vrací objekty Read Modelu
Query
Query
ServiceUI
Query
Objekty
UI
• UI nepřekládá objekty
(jsou Read Model)
• Pouze sestaví odpověď
• Testování
Query
ServiceUI
Query
Objekty
UI
Query Service
• Pro UI rozhraní
• Přesně pro dané čtení
• Efektivní
Query
ServiceUI
Query
Objekty
Query Service
CQRS
Command
Bus
UI
Handler
Query
Service
(Write Model)
(Read Model)
CQRS
• Jednoduchý architektonický vzor
• Zápis a čtení jsou oddělené a
neovlivňují se
• Umožňuje tunit výkon
Command
Bus
UI
Handler
Query
Service
(Write Model)
(Read Model)
CQRS ≠ Event Sourcing
CQRS
Bez čtecí DB
Command
Bus
UI
Handler
Query
Service
(Write Model)
(Read Model)
CQRS
Mixujte DB
Handler
Vyhledávání
90% Systému
Domain-Driven
Design Svaťa Šimara
svatasimara.cz
simara-svatopluk
@svatasimara

Weitere ähnliche Inhalte

Was ist angesagt?

Методи за криптиране и декриптиране на данни
Методи за криптиране и декриптиране на данниМетоди за криптиране и декриптиране на данни
Методи за криптиране и декриптиране на данни
pinf_117075
 
Encoded Attacks And Countermeasures
Encoded Attacks And CountermeasuresEncoded Attacks And Countermeasures
Encoded Attacks And Countermeasures
Marco Morana
 

Was ist angesagt? (10)

Chrome DevTools로 JS 메모리릭 디버깅하기.pptx
Chrome DevTools로 JS 메모리릭 디버깅하기.pptxChrome DevTools로 JS 메모리릭 디버깅하기.pptx
Chrome DevTools로 JS 메모리릭 디버깅하기.pptx
 
BugBounty Roadmap with Mohammed Adam
BugBounty Roadmap with Mohammed AdamBugBounty Roadmap with Mohammed Adam
BugBounty Roadmap with Mohammed Adam
 
Cipher techniques
Cipher techniquesCipher techniques
Cipher techniques
 
Методи за криптиране и декриптиране на данни
Методи за криптиране и декриптиране на данниМетоди за криптиране и декриптиране на данни
Методи за криптиране и декриптиране на данни
 
Data Date #3: Jan Tichý - Jak pracovat v BigQuery s daty z Google Analytics 4
Data Date #3: Jan Tichý - Jak pracovat v BigQuery s daty z Google Analytics 4Data Date #3: Jan Tichý - Jak pracovat v BigQuery s daty z Google Analytics 4
Data Date #3: Jan Tichý - Jak pracovat v BigQuery s daty z Google Analytics 4
 
network security
network securitynetwork security
network security
 
[D2 오픈세미나]1.무한스크롤성능개선
[D2 오픈세미나]1.무한스크롤성능개선[D2 오픈세미나]1.무한스크롤성능개선
[D2 오픈세미나]1.무한스크롤성능개선
 
Jhon the ripper
Jhon the ripper Jhon the ripper
Jhon the ripper
 
Encoded Attacks And Countermeasures
Encoded Attacks And CountermeasuresEncoded Attacks And Countermeasures
Encoded Attacks And Countermeasures
 
Build Programming Language Runtime with LLVM
Build Programming Language Runtime with LLVMBuild Programming Language Runtime with LLVM
Build Programming Language Runtime with LLVM
 

Ähnlich wie Read model & CQRS

TPL - konkurenční, paralelní a asynchronní kód pro náročné
TPL - konkurenční, paralelní a asynchronní kód pro náročnéTPL - konkurenční, paralelní a asynchronní kód pro náročné
TPL - konkurenční, paralelní a asynchronní kód pro náročné
René Stein
 

Ähnlich wie Read model & CQRS (6)

DDD kurz - 4. Implementace
DDD kurz - 4. ImplementaceDDD kurz - 4. Implementace
DDD kurz - 4. Implementace
 
Spring framework - J2EE S Lidskou Tvari
Spring framework - J2EE S Lidskou TvariSpring framework - J2EE S Lidskou Tvari
Spring framework - J2EE S Lidskou Tvari
 
Výběr vhodných technologii pro startup v prostředí cloudu
Výběr vhodných technologii pro startup v prostředí clouduVýběr vhodných technologii pro startup v prostředí cloudu
Výběr vhodných technologii pro startup v prostředí cloudu
 
Péhápkaři v Pecce: Naše cesta k read-modelu – Vojtěch Buba –18. 5. 2022
Péhápkaři v Pecce: Naše cesta k read-modelu – Vojtěch Buba –18. 5. 2022Péhápkaři v Pecce: Naše cesta k read-modelu – Vojtěch Buba –18. 5. 2022
Péhápkaři v Pecce: Naše cesta k read-modelu – Vojtěch Buba –18. 5. 2022
 
Axure RP training
Axure RP trainingAxure RP training
Axure RP training
 
TPL - konkurenční, paralelní a asynchronní kód pro náročné
TPL - konkurenční, paralelní a asynchronní kód pro náročnéTPL - konkurenční, paralelní a asynchronní kód pro náročné
TPL - konkurenční, paralelní a asynchronní kód pro náročné
 

Mehr von Svatopluk Šimara

Mehr von Svatopluk Šimara (8)

Focus on the essece with Domain-Driven Design
Focus on the essece with Domain-Driven DesignFocus on the essece with Domain-Driven Design
Focus on the essece with Domain-Driven Design
 
DDD + Doctrine
DDD + DoctrineDDD + Doctrine
DDD + Doctrine
 
DDD kurz - 5. Persistence + Doctrine
DDD kurz - 5. Persistence + DoctrineDDD kurz - 5. Persistence + Doctrine
DDD kurz - 5. Persistence + Doctrine
 
DDD kurz - 3. model
DDD kurz - 3. modelDDD kurz - 3. model
DDD kurz - 3. model
 
Monorepo: How We Started to Save Our Developers Time
Monorepo: How We Started to Save Our Developers TimeMonorepo: How We Started to Save Our Developers Time
Monorepo: How We Started to Save Our Developers Time
 
DDD kurz - 2. jazyk
DDD kurz - 2. jazykDDD kurz - 2. jazyk
DDD kurz - 2. jazyk
 
DDD kurz - 1. přehled
DDD kurz - 1. přehledDDD kurz - 1. přehled
DDD kurz - 1. přehled
 
Domain-Driven Design Sraz 6.6.2018
Domain-Driven Design Sraz 6.6.2018Domain-Driven Design Sraz 6.6.2018
Domain-Driven Design Sraz 6.6.2018
 

Read model & CQRS