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

Diferencias entre negocio en participación y consorcio de cooperación
Diferencias entre negocio en participación y consorcio de cooperaciónDiferencias entre negocio en participación y consorcio de cooperación
Diferencias entre negocio en participación y consorcio de cooperación
vglibota
 
Contrato de comodato
Contrato de comodatoContrato de comodato
Contrato de comodato
reginamejiamendez
 
Roles y estatus en los equipos
Roles y estatus en los equiposRoles y estatus en los equipos
Roles y estatus en los equipos
lalachava16
 
Analisis kasus pertanahan
Analisis kasus pertanahanAnalisis kasus pertanahan
Analisis kasus pertanahanlukipower
 
Contrato de donación guia..pdf
Contrato de donación guia..pdfContrato de donación guia..pdf
Contrato de donación guia..pdf
NoahSong3
 
Draft perjanjian jual beli aset billingual clean
Draft perjanjian jual beli aset  billingual  cleanDraft perjanjian jual beli aset  billingual  clean
Draft perjanjian jual beli aset billingual clean
GLC
 
Draft spal jsa pt brillian inti sukses
Draft spal jsa pt brillian inti suksesDraft spal jsa pt brillian inti sukses
Draft spal jsa pt brillian inti sukses
John Gwee Huat CEO Jatijaya Group
 
Perjanjian pinjaman Loan agreement (Beli Perjanjian, Hub: 08118887270 (WA))
Perjanjian pinjaman Loan agreement (Beli Perjanjian, Hub: 08118887270 (WA))Perjanjian pinjaman Loan agreement (Beli Perjanjian, Hub: 08118887270 (WA))
Perjanjian pinjaman Loan agreement (Beli Perjanjian, Hub: 08118887270 (WA))
GLC
 
Derecho societario
Derecho societarioDerecho societario
Derecho societario
Delcy Cabello
 
Glosario terminos
Glosario terminosGlosario terminos
Glosario terminos
marlen19_70
 
Modelo de novación
Modelo de novaciónModelo de novación
Modelo de novación
jennyffercastro
 
Analisis putusan pailit no 60 pailit 2001 pn.niaga.jkt.pst
Analisis putusan pailit no 60 pailit 2001 pn.niaga.jkt.pstAnalisis putusan pailit no 60 pailit 2001 pn.niaga.jkt.pst
Analisis putusan pailit no 60 pailit 2001 pn.niaga.jkt.pst
Imam Bukhori
 
Exhibit on moneylending agreement
Exhibit on moneylending agreementExhibit on moneylending agreement
Exhibit on moneylending agreement
MNorazizi HM
 
Contoh akta pengalihan hak (cessie)
Contoh akta pengalihan hak (cessie)Contoh akta pengalihan hak (cessie)
Contoh akta pengalihan hak (cessie)
Manunggal Amethyst
 
Modelo contrato joint venture
Modelo contrato joint ventureModelo contrato joint venture
Modelo contrato joint venture
juan oppe
 
Pengetahuan hukum bagi broker properti
Pengetahuan hukum bagi broker propertiPengetahuan hukum bagi broker properti
Pengetahuan hukum bagi broker properti
Leks&Co
 
Escrituras publicas
Escrituras publicasEscrituras publicas
Escrituras publicas
PTF
 
CIADI informe
CIADI informeCIADI informe
CIADI informe
Sabrina Gambazza
 
Analisis del acuerdo especial
Analisis del acuerdo especialAnalisis del acuerdo especial
Analisis del acuerdo especial
Belice Esnuestro
 
El proceso monitorio art 676 685
El proceso monitorio art 676 685El proceso monitorio art 676 685
El proceso monitorio art 676 685
Juan Pablo Hernandez Flores
 

What's hot (20)

Diferencias entre negocio en participación y consorcio de cooperación
Diferencias entre negocio en participación y consorcio de cooperaciónDiferencias entre negocio en participación y consorcio de cooperación
Diferencias entre negocio en participación y consorcio de cooperación
 
Contrato de comodato
Contrato de comodatoContrato de comodato
Contrato de comodato
 
Roles y estatus en los equipos
Roles y estatus en los equiposRoles y estatus en los equipos
Roles y estatus en los equipos
 
Analisis kasus pertanahan
Analisis kasus pertanahanAnalisis kasus pertanahan
Analisis kasus pertanahan
 
Contrato de donación guia..pdf
Contrato de donación guia..pdfContrato de donación guia..pdf
Contrato de donación guia..pdf
 
Draft perjanjian jual beli aset billingual clean
Draft perjanjian jual beli aset  billingual  cleanDraft perjanjian jual beli aset  billingual  clean
Draft perjanjian jual beli aset billingual clean
 
Draft spal jsa pt brillian inti sukses
Draft spal jsa pt brillian inti suksesDraft spal jsa pt brillian inti sukses
Draft spal jsa pt brillian inti sukses
 
Perjanjian pinjaman Loan agreement (Beli Perjanjian, Hub: 08118887270 (WA))
Perjanjian pinjaman Loan agreement (Beli Perjanjian, Hub: 08118887270 (WA))Perjanjian pinjaman Loan agreement (Beli Perjanjian, Hub: 08118887270 (WA))
Perjanjian pinjaman Loan agreement (Beli Perjanjian, Hub: 08118887270 (WA))
 
Derecho societario
Derecho societarioDerecho societario
Derecho societario
 
Glosario terminos
Glosario terminosGlosario terminos
Glosario terminos
 
Modelo de novación
Modelo de novaciónModelo de novación
Modelo de novación
 
Analisis putusan pailit no 60 pailit 2001 pn.niaga.jkt.pst
Analisis putusan pailit no 60 pailit 2001 pn.niaga.jkt.pstAnalisis putusan pailit no 60 pailit 2001 pn.niaga.jkt.pst
Analisis putusan pailit no 60 pailit 2001 pn.niaga.jkt.pst
 
Exhibit on moneylending agreement
Exhibit on moneylending agreementExhibit on moneylending agreement
Exhibit on moneylending agreement
 
Contoh akta pengalihan hak (cessie)
Contoh akta pengalihan hak (cessie)Contoh akta pengalihan hak (cessie)
Contoh akta pengalihan hak (cessie)
 
Modelo contrato joint venture
Modelo contrato joint ventureModelo contrato joint venture
Modelo contrato joint venture
 
Pengetahuan hukum bagi broker properti
Pengetahuan hukum bagi broker propertiPengetahuan hukum bagi broker properti
Pengetahuan hukum bagi broker properti
 
Escrituras publicas
Escrituras publicasEscrituras publicas
Escrituras publicas
 
CIADI informe
CIADI informeCIADI informe
CIADI informe
 
Analisis del acuerdo especial
Analisis del acuerdo especialAnalisis del acuerdo especial
Analisis del acuerdo especial
 
El proceso monitorio art 676 685
El proceso monitorio art 676 685El proceso monitorio art 676 685
El proceso monitorio art 676 685
 

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