CQRS

Az oldal jelenlegi verzióját még nem ellenőrizték tapasztalt hozzászólók, és jelentősen eltérhet a 2016. november 29-én felülvizsgált verziótól ; az ellenőrzések 20 szerkesztést igényelnek .

A Command and Query Responsibility Segregation (CQRS) – a CQRS elve vagy paradigmája elválasztja a lekérdezések célját (pl. adatok olvasásakor) és az adatfeldolgozási parancsokat. A CQRS megvalósítása egy alkalmazásban maximalizálhatja annak teljesítményét, méretezhetőségét és biztonságát. A CQRS-re való átállás által teremtett rugalmasság lehetővé teszi a rendszer jobb fejlődését az idő múlásával, és megakadályozza, hogy a frissítési parancsok összevonási ütközéseket okozzanak a tartomány szintjén. [egy]

A CQRS minta parancs -lekérdezés szétválasztás ( CQS ) kötelező programozást alkalmaz, külön lekérdezési és parancsobjektumokat használva az adatok lekérésére és módosítására [2] [3] . A CQRS-t Bertrand Meyer vezette be, miközben az Eiffel programozási nyelven dolgozott . Az elv szerint a metódusnak vagy parancsnak kell lennie, amely valamilyen műveletet hajt végre, vagy olyan lekérdezésnek , amely adatokat ad vissza, de nem mindkettőt. Más szóval, egy kérdés feltevés nem változtathatja meg a választ . Formálisabban csak egy tiszta (azaz determinisztikus és mellékhatásoktól mentes ) módszer adhat vissza értéket . Ennek az elvnek a szigorú betartása lehetetlenné teszi a lekérdező hívások számának nyomon követését.

Alkalmazások a szerződéses programozásban

A CQRS különösen jól illeszkedik a szerződés-programozási módszertanhoz, amely forráskódba ágyazott állításokat használ a program állapotának leírására bizonyos fontos pontokon. A szerződéses programozásban az állítások a tervezésre vonatkoznak, nem a végrehajtási logikára, így végrehajtásuk nem befolyásolhatja a program állapotát. A CQRS előnyös a szerződésprogramozáshoz, mert bármely értékvisszaadó metódus (bármilyen lekérdezés) meghívható utasításokban anélkül, hogy aggódnánk a program állapotának esetleges változásai miatt.

Elméletileg ez lehetővé teszi a program állapotának megismerését anélkül, hogy megváltoztatná azt. A gyakorlatban a CQRS lehetővé teszi az összes érvényesítési ellenőrzés kihagyását egy élő rendszerben, hogy javítsa a teljesítményét anélkül, hogy attól félne, hogy ez megváltoztatja a viselkedését. A CQRS bizonyos Heisenbugok előfordulását is megakadályozza .

Egyéb felhasználások

A CQRS használatát a szerzõdéses programozáson kívül is úgy látják hívei, hogy leegyszerûsítõ hatást fejt ki a programra, érthetõbbé teszi állapotának elérését (lekérdezéseken keresztül) és állapotának megváltoztatását (parancsokkal), éppúgy, mint a goto használatának elkerülését. megkönnyíti a programvégrehajtás folyamatának megértését.

A CQRS jól illeszkedik az objektum-orientált programozási módszertanhoz, de OOP-on kívül is alkalmazható, mivel a mellékhatások és a visszatérési értékek szétválasztása nem igényel OOP-t, így a CQRS bármely programozási paradigmában hasznosan alkalmazható . a mellékhatások miatti aggódást igényel.

Hátrányok

A CQRS megnehezítheti az újra belépő és többszálú szoftverek létrehozását. Ez a probléma általában akkor fordul elő, ha nem szálbiztos mintát használ a CQRS megvalósításához.

Egy egyszerű példa egy mintára, amely sérti a CQRS-t, de hasznos a többszálú szoftverekben:

privát int x ; nyilvános increment_and_return_x ( ) { zár x ; // valamiféle zárszerkezet x = x + 1 ; int x_másolat = x ; x feloldása ; // valamiféle zárszerkezet return x_copy ; }

Általános CQRS-minta, amely csak egyszálas alkalmazásokban alkalmazható:

privát int x ; nyilvános int érték () { visszatér x ; } void increment_x () { x = x + 1_ _ }

Még az egyszálú programok esetében is lehet néha érvelni, hogy sokkal kényelmesebb egy kérést és parancsot kombináló metódus. Martin Fowler a veremmódszert pop() hozza fel példaként. [négy]

Lásd még

Jegyzetek

  1. sárkány119. CQRS-minta – Azure Architecture   Center ? . docs.microsoft.com . Letöltve: 2021. április 1. Az eredetiből archiválva : 2021. április 20.
  2. Young, Greg CQRS dokumentumok . Hozzáférés dátuma: 2012. december 28. Az eredetiből archiválva : 2014. augusztus 24..
  3. Fowler, Martin CQRS . Letöltve: 2011. július 14. Az eredetiből archiválva : 2015. június 29.
  4. CommandQuerySeparation . Letöltve: 2012. május 18. Az eredetiből archiválva : 2015. június 28..

Irodalom

Linkek