CQRS

Aktuální verze stránky ještě nebyla zkontrolována zkušenými přispěvateli a může se výrazně lišit od verze recenzované 29. listopadu 2016; kontroly vyžadují 20 úprav .

Command and Query Responsibility Segregation (CQRS) - princip či paradigma CQRS odděluje účel dotazů (např. při čtení dat) a příkazy pro zpracování dat. Implementace CQRS v aplikaci může maximalizovat její výkon, škálovatelnost a zabezpečení. Flexibilita vytvořená přechodem na CQRS umožňuje systému, aby se v průběhu času lépe vyvíjel, a zabraňuje aktualizačním příkazům způsobovat konflikty při slučování na úrovni domény. [jeden]

Vzor CQRS používá imperativní programování separace příkazů a dotazů ( CQS ) , přičemž k získávání a úpravě dat používá samostatné objekty dotazu a příkazu [2] [3] . CQRS zavedl Bertrand Meyer při práci na programovacím jazyku Eiffel . Princip říká, že metoda musí být buď příkaz , který provede nějakou akci, nebo dotaz , který vrátí data, ale ne obojí. Jinými slovy, položení otázky by nemělo změnit odpověď . Formálněji může vrátit hodnotu pouze čistá (tj . deterministická a bez vedlejších efektů ) metoda . Přísné dodržování této zásady znemožňuje sledování počtu dotazů.

Aplikace ve smluvním programování

CQRS se obzvláště dobře hodí k metodice smluvního programování , která používá aserce , vložená do zdrojového kódu, k popisu stavu programu v určitých důležitých bodech. Ve smluvním programování jsou aserce o návrhu, nikoli o logice provádění, takže jejich provedení by nemělo ovlivnit stav programu. CQRS je přínosné pro smluvní programování, protože jakákoli metoda vracení hodnoty (jakýkoli dotaz) může být volána v příkazech bez obav z možných změn stavu programu.

Teoreticky to umožňuje znát stav programu bez jeho změny. V praxi CQRS umožňuje přeskočit všechny kontroly asercí v živém systému za účelem zlepšení jeho výkonu bez obav, že to změní jeho chování. CQRS také zabraňuje výskytu některých Heisenbugů .

Další použití

Dokonce i mimo smluvní programování je používání CQRS jeho přívrženci vnímáno jako zjednodušující účinek na program, díky kterému je přístup k jeho stavu (prostřednictvím dotazů) a změna jeho stavu (prostřednictvím příkazů) srozumitelnější, stejně jako vyhýbání se použití goto . usnadňuje pochopení toku provádění programu.

CQRS se dobře hodí pro metodologii objektově orientovaného programování, ale lze jej použít i mimo OOP, protože oddělení vedlejších efektů a návratových hodnot nevyžaduje OOP, takže CQRS lze užitečně použít v jakémkoli programovacím paradigmatu , vyžaduje obavy z vedlejších účinků.

Nevýhody

CQRS může ztížit vytváření reentrantního a vícevláknového softwaru. K tomuto problému obvykle dochází při použití vzoru, který není bezpečný pro vlákna pro implementaci CQRS.

Jednoduchý příklad vzoru, který porušuje CQRS, ale je užitečný ve vícevláknovém softwaru:

private int x ; public int increment_and_return_x () { zámek x ; // nějaký uzamykací mechanismus x = x + 1 ; int x_kopie = x ; odemknout x ; // nějaký druh zamykacího mechanismu return x_copy ; }

Společný vzor CQRS použitelný pouze v jednovláknových aplikacích:

private int x ; veřejná hodnota ( ) { návrat x ; } void increment_x () { x = x + 1 _ }

I v případě jednovláknových programů lze někdy namítnout, že je mnohem pohodlnější mít metodu, která kombinuje požadavek a příkaz. Martin Fowler uvádí jako příklad metodu zásobníku . [čtyři]pop()

Viz také

Poznámky

  1. drak119. Vzor CQRS – Azure Architecture   Center ? . docs.microsoft.com . Získáno 1. dubna 2021. Archivováno z originálu dne 20. dubna 2021.
  2. Young, Greg Dokumenty CQRS . Datum přístupu: 28. prosince 2012. Archivováno z originálu 24. srpna 2014.
  3. Fowler, Martin CQRS . Získáno 14. července 2011. Archivováno z originálu dne 29. června 2015.
  4. CommandQuerySeparation . Získáno 18. 5. 2012. Archivováno z originálu 28. 6. 2015.

Literatura

Odkazy