Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Read model & CQRS

145 views

Published on

Máte pomalé webové aplikace? Způsobuje Vám import dat výkonnostní problémy webu či deadlocky? Máte složitou logiku, které je těžké porozumět? Pokud jste si odpověděli alespoň na jednu otázku „ano“, určitě přijďte na přednášku. Dozvíte se, jak tyto problémy pomocí Read Modelu a CQRS jednoduše řešit.

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Read model & CQRS

  1. 1. Svaťa Šimara Read Model CQRS Read Model CQRS
  2. 2. Model
  3. 3. Mapa
  4. 4. Model • Mentální reprezentace reality • Pro konkrétní použítí • Neuniverzální
  5. 5. 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
  6. 6. Model produktu Product Property Value 0..*
  7. 7. Model produktu Product Parent Variant 1..* Property Value 0..*
  8. 8. Model produktu • Doménový model • Pravidla • Významy • Pojmy
  9. 9. Model produktu • Super na práci s pravidly – Změny – Údržba – Pochpení
  10. 10. Model produktu • Nevhodný pro vyhledávání – Složitý – Pomalý
  11. 11. Řešení pro vyhledávání
  12. 12. Ústupky v modelu
  13. 13. Ústupky v modelu • Neexistující koncepty • Složité na pochopení • „Proč je toto takto?” – Pokud autor myšlenek odešel, nikdo neví
  14. 14. Ústupky v modelu • Změny – „Neřešitelné” problémy • 2 modely zároveň – Doménový – Rychlý čtecí
  15. 15. Model pro vyhledávání
  16. 16. 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 • ...
  17. 17. Model pro vyhledávání Product Variant1..* Property Value0..*
  18. 18. Read Model
  19. 19. Read Model • Další model • Pro čtecí use-case • Neočekáváme chování • Read only
  20. 20. Read Model Read Model Write Model Write Use Cases Read Use Cases
  21. 21. Read Model Read Model Write Model Write Use Cases Read Use Cases ✔ Model pro čtecí use-case ✗ Performance
  22. 22. Čtecí databáze Read Model Write Model Write Use Cases Read Use Cases
  23. 23. Čtecí databáze ✔ Model pro čtecí use-case ✔ Performance Read Model Write Model Write Use Cases Read Use Cases
  24. 24. Synchronizace • Nový prvek systému – Nové problémy • Netransakčnost
  25. 25. Read Model ≠ Cache
  26. 26. ¿ přestávka ? Read Model Write Model Write Use Cases Read Use Cases
  27. 27. 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
  28. 28. CQRS
  29. 29. CQRS • Command • Query • Responsibility • Separation
  30. 30. CQRS • Oddělení čtecích a zápisových zodpovědností
  31. 31. Command
  32. 32. 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
  33. 33. Command • Vystav fakturu! • Deaktivuj účet! • Pošli e-mail k obnovení zapomenutého hesla!
  34. 34. Command Command Bus UI API CLI Handler (Write Model) Command Command
  35. 35. Command
  36. 36. 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
  37. 37. UI
  38. 38. 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
  39. 39. 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
  40. 40. Handler
  41. 41. Vše je zřejmé?
  42. 42. Commandy NIC nevrací
  43. 43. Commandy NIC nevrací
  44. 44. Commandy NIC nevrací
  45. 45. Commandy NIC nevrací • Generování ID dopředu • UUID
  46. 46. Commandy NIC nevrací
  47. 47. ¿ přestávka ?
  48. 48. Query
  49. 49. Query
  50. 50. Query • Dotaz na data • Nikdy nemění stav – Nikdy – Nikdy – Nikdy
  51. 51. Query • Přesně pro potřeby UI • Vrací objekty Read Modelu
  52. 52. Query Query ServiceUI Query Objekty
  53. 53. UI • UI nepřekládá objekty (jsou Read Model) • Pouze sestaví odpověď • Testování Query ServiceUI Query Objekty
  54. 54. UI
  55. 55. Query Service • Pro UI rozhraní • Přesně pro dané čtení • Efektivní Query ServiceUI Query Objekty
  56. 56. Query Service
  57. 57. CQRS Command Bus UI Handler Query Service (Write Model) (Read Model)
  58. 58. 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)
  59. 59. CQRS ≠ Event Sourcing
  60. 60. CQRS Bez čtecí DB Command Bus UI Handler Query Service (Write Model) (Read Model)
  61. 61. CQRS Mixujte DB Handler Vyhledávání 90% Systému
  62. 62. Domain-Driven Design Svaťa Šimara svatasimara.cz simara-svatopluk @svatasimara

×