SlideShare a Scribd company logo
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

More Related Content

What's hot

Zephyr-Overview-20230124.pdf
Zephyr-Overview-20230124.pdfZephyr-Overview-20230124.pdf
Zephyr-Overview-20230124.pdf
ibramax
 
Lecture 3: Visualization and Programming
Lecture 3: Visualization and ProgrammingLecture 3: Visualization and Programming
Lecture 3: Visualization and Programming
Smee Kaem Chann
 
What Can Compilers Do for Us?
What Can Compilers Do for Us?What Can Compilers Do for Us?
What Can Compilers Do for Us?
National Cheng Kung University
 
DSC 再入門
DSC 再入門DSC 再入門
DSC 再入門
Kazuki Takai
 
OpenStack Architecture
OpenStack ArchitectureOpenStack Architecture
OpenStack Architecture
Mirantis
 
Virtual Machine Constructions for Dummies
Virtual Machine Constructions for DummiesVirtual Machine Constructions for Dummies
Virtual Machine Constructions for Dummies
National Cheng Kung University
 
5 p9 pnor and open bmc overview - final
5 p9 pnor and open bmc overview - final5 p9 pnor and open bmc overview - final
5 p9 pnor and open bmc overview - final
Yutaka Kawai
 
HKG18-223 - Trusted FirmwareM: Trusted boot
HKG18-223 - Trusted FirmwareM: Trusted bootHKG18-223 - Trusted FirmwareM: Trusted boot
HKG18-223 - Trusted FirmwareM: Trusted boot
Linaro
 
Project ACRN hypervisor introduction
Project ACRN hypervisor introduction Project ACRN hypervisor introduction
Project ACRN hypervisor introduction
Project ACRN
 
BHyVeってなんや
BHyVeってなんやBHyVeってなんや
BHyVeってなんやTakuya ASADA
 
Broken Linux Performance Tools 2016
Broken Linux Performance Tools 2016Broken Linux Performance Tools 2016
Broken Linux Performance Tools 2016
Brendan Gregg
 
OVN 設定サンプル | OVN config example 2015/12/27
OVN 設定サンプル | OVN config example 2015/12/27OVN 設定サンプル | OVN config example 2015/12/27
OVN 設定サンプル | OVN config example 2015/12/27
Kentaro Ebisawa
 
Current & Future Use-Cases of OpenDaylight
Current & Future Use-Cases of OpenDaylightCurrent & Future Use-Cases of OpenDaylight
Current & Future Use-Cases of OpenDaylight
abhijit2511
 
OpenvswitchでVPS
OpenvswitchでVPSOpenvswitchでVPS
OpenvswitchでVPS
Daisuke Nakajima
 
FreeBSD and Drivers
FreeBSD and DriversFreeBSD and Drivers
FreeBSD and Drivers
Kernel TLV
 
LXDのすすめ
LXDのすすめLXDのすすめ
LXDのすすめ
智之 大野
 
Open source computer vision with TensorFlow, Apache MiniFi, Apache NiFi, Open...
Open source computer vision with TensorFlow, Apache MiniFi, Apache NiFi, Open...Open source computer vision with TensorFlow, Apache MiniFi, Apache NiFi, Open...
Open source computer vision with TensorFlow, Apache MiniFi, Apache NiFi, Open...
DataWorks Summit
 
Technical Communication for Unity Developers
Technical Communication for Unity DevelopersTechnical Communication for Unity Developers
Technical Communication for Unity Developers
Unity Technologies
 
How Linux Processes Your Network Packet - Elazar Leibovich
How Linux Processes Your Network Packet - Elazar LeibovichHow Linux Processes Your Network Packet - Elazar Leibovich
How Linux Processes Your Network Packet - Elazar Leibovich
DevOpsDays Tel Aviv
 

What's hot (20)

Zephyr-Overview-20230124.pdf
Zephyr-Overview-20230124.pdfZephyr-Overview-20230124.pdf
Zephyr-Overview-20230124.pdf
 
Lecture 3: Visualization and Programming
Lecture 3: Visualization and ProgrammingLecture 3: Visualization and Programming
Lecture 3: Visualization and Programming
 
What Can Compilers Do for Us?
What Can Compilers Do for Us?What Can Compilers Do for Us?
What Can Compilers Do for Us?
 
DSC 再入門
DSC 再入門DSC 再入門
DSC 再入門
 
美团技术团队 - KVM性能优化
美团技术团队 - KVM性能优化美团技术团队 - KVM性能优化
美团技术团队 - KVM性能优化
 
OpenStack Architecture
OpenStack ArchitectureOpenStack Architecture
OpenStack Architecture
 
Virtual Machine Constructions for Dummies
Virtual Machine Constructions for DummiesVirtual Machine Constructions for Dummies
Virtual Machine Constructions for Dummies
 
5 p9 pnor and open bmc overview - final
5 p9 pnor and open bmc overview - final5 p9 pnor and open bmc overview - final
5 p9 pnor and open bmc overview - final
 
HKG18-223 - Trusted FirmwareM: Trusted boot
HKG18-223 - Trusted FirmwareM: Trusted bootHKG18-223 - Trusted FirmwareM: Trusted boot
HKG18-223 - Trusted FirmwareM: Trusted boot
 
Project ACRN hypervisor introduction
Project ACRN hypervisor introduction Project ACRN hypervisor introduction
Project ACRN hypervisor introduction
 
BHyVeってなんや
BHyVeってなんやBHyVeってなんや
BHyVeってなんや
 
Broken Linux Performance Tools 2016
Broken Linux Performance Tools 2016Broken Linux Performance Tools 2016
Broken Linux Performance Tools 2016
 
OVN 設定サンプル | OVN config example 2015/12/27
OVN 設定サンプル | OVN config example 2015/12/27OVN 設定サンプル | OVN config example 2015/12/27
OVN 設定サンプル | OVN config example 2015/12/27
 
Current & Future Use-Cases of OpenDaylight
Current & Future Use-Cases of OpenDaylightCurrent & Future Use-Cases of OpenDaylight
Current & Future Use-Cases of OpenDaylight
 
OpenvswitchでVPS
OpenvswitchでVPSOpenvswitchでVPS
OpenvswitchでVPS
 
FreeBSD and Drivers
FreeBSD and DriversFreeBSD and Drivers
FreeBSD and Drivers
 
LXDのすすめ
LXDのすすめLXDのすすめ
LXDのすすめ
 
Open source computer vision with TensorFlow, Apache MiniFi, Apache NiFi, Open...
Open source computer vision with TensorFlow, Apache MiniFi, Apache NiFi, Open...Open source computer vision with TensorFlow, Apache MiniFi, Apache NiFi, Open...
Open source computer vision with TensorFlow, Apache MiniFi, Apache NiFi, Open...
 
Technical Communication for Unity Developers
Technical Communication for Unity DevelopersTechnical Communication for Unity Developers
Technical Communication for Unity Developers
 
How Linux Processes Your Network Packet - Elazar Leibovich
How Linux Processes Your Network Packet - Elazar LeibovichHow Linux Processes Your Network Packet - Elazar Leibovich
How Linux Processes Your Network Packet - Elazar Leibovich
 

Similar to Read model & CQRS

DDD kurz - 4. Implementace
DDD kurz - 4. ImplementaceDDD kurz - 4. Implementace
DDD kurz - 4. Implementace
Svatopluk Šimara
 
Spring framework - J2EE S Lidskou Tvari
Spring framework - J2EE S Lidskou TvariSpring framework - J2EE S Lidskou Tvari
Spring framework - J2EE S Lidskou Tvari
Roman Pichlík
 
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
Jan Kodera
 
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
PeckaDesign.cz
 
Axure RP training
Axure RP trainingAxure RP training
Axure RP training
Jakub Španihel
 
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
 

Similar to 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é
 

More from Svatopluk Šimara

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
Svatopluk Šimara
 
DDD + Doctrine
DDD + DoctrineDDD + Doctrine
DDD + Doctrine
Svatopluk Šimara
 
DDD kurz - 5. Persistence + Doctrine
DDD kurz - 5. Persistence + DoctrineDDD kurz - 5. Persistence + Doctrine
DDD kurz - 5. Persistence + Doctrine
Svatopluk Šimara
 
DDD kurz - 3. model
DDD kurz - 3. modelDDD kurz - 3. model
DDD kurz - 3. model
Svatopluk Šimara
 
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
Svatopluk Šimara
 
DDD kurz - 2. jazyk
DDD kurz - 2. jazykDDD kurz - 2. jazyk
DDD kurz - 2. jazyk
Svatopluk Šimara
 
DDD kurz - 1. přehled
DDD kurz - 1. přehledDDD kurz - 1. přehled
DDD kurz - 1. přehled
Svatopluk Šimara
 
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
Svatopluk Šimara
 

More from 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