Érdekes

Parancs Lekérdezés Felelősséget Szegregáció

Eredeti Martin Fowler az https://martinfowler.com/bliki/CQRS.html

Készült 17.08.2017

Parancs Lekérdezés Felelősséget Szegregáció jelentése  – CQRS (Command Query Responsibility Segregation).

Ez egy minta, amit először hallottam által leírt Greg Young. A szívén az a gondolat, hogy egy másik modell frissítése információt, mint a modellt használja, olvassa el az információkat. Bizonyos helyzetekben ez az elkülönít

és lehet értékes, de vigyázz, hogy a legtöbb rendszerek CQRS hozzáteszi kockázatos komplexitás.

A hagyományos megközelítés ember használja a kölcsönhatásban egy információs rendszer kezelni, mint egy CRUD datastore. Ezen azt értem, hogy a mentális modell a rekord szerkezet, ahol létrehozhatunk új lemezeket, olvassa el a feljegyzések, frissítse meglévő rekordokat, illetve törölhetjük a rekordokat, amikor végzünk velük. A legegyszerűbb esetben, a kölcsönhatások az egész tárolása, lekérdezése ezeket a feljegyzéseket.

Mivel az igények egyre kifinomultabb folyamatosan mozog el, hogy a modell. Lehet, hogy meg akarom nézni az információt egy másik módja annak, hogy a boltban, talán összeomlik több rekordot egy, vagy képező virtuális lemezeket kombinálásával információkat a különböző helyeken. A frissítés az oldalon lehet megtalálni érvényesítési szabály, hogy csak akkor teszi lehetővé bizonyos kombinációk adatokat tárolni kell, vagy lehet még következtetni adatokat kell tárolni, hogy más biztosítunk.

Mivel ez akkor fordul elő, kezdjük látni, hogy több ábrázolása információkat. Amikor a felhasználók befolyásolja az információkat, használja a különböző előadások az információkat, amelyek mindegyike más-más képviselet. A fejlesztők általában építeni saját fogalmi modell, amely az általuk használt manipulálni a mag a modell elemei. Ha használ egy Domain-Modell, akkor ez általában a fogalmi reprezentáció, a domain. Általában is, hogy a tartós tárolás, olyan közel, hogy a fogalmi modell, mint te.

Ez a szerkezet több réteg képviselete tud nagyon bonyolult, de ha az emberek ezt még mindig megoldani, hogy egy egységes fogalmi reprezentáció, amely működik, mint egy fogalmi integráció pont között az előadások.

A változás, hogy a CQRS bemutatja, hogy a split fogalmi modell különálló modellek frissítés, kijelző, ami arra utal, hogy olyan Parancsot, majd Lekérdezés, illetve a következő a szókincs CommandQuerySeparation. Ennek magyarázata az, hogy a sok probléma, különösen a bonyolultabb, domainek, amelyek ugyanazt a fogalmi modell parancsok, lekérdezések vezet egy sokkal összetettebb modell, hogy nem jól.

Külön modellek leggyakrabban különböző objektum modellek, valószínűleg futó különböző logikai folyamatok, talán külön hardver. Egy web példa egy felhasználó egy web-oldal felhasználásával kerül előállításra a lekérdezés modell. Ha egy módosítást kezdeményez, hogy a változás irányítva, hogy a külön parancs modell feldolgozása, az ebből eredő változás közölt, hogy a lekérdezés modell, amely a frissített állam.

Van hely a jelentős különbségek. A memória modellek előfordulhat, hogy ugyanazt az adatbázist, amely esetben az adatbázis működik, mint a kommunikáció a két modell. Azonban ők is használhatnak különböző adatbázisokat, így gyakorlatilag a lekérdezés-side adatbázis valós idejű ReportingDatabase. Ebben az esetben kell egy kommunikációs mechanizmus a két modell közti, illetve az adatbázisok.

A két modell lehet, hogy nem külön tárgy, modell, lehet, hogy ugyanaz a tárgy különböző felületek a parancs oldalán a lekérdezés oldalon, inkább, mint a kilátás a relációs adatbázisok. De általában, ha hallom a CQRS, azok egyértelműen külön modellek.

CQRS természetesen illik néhány más építészeti szokások.

  • Ahogy haladunk el egy egységes képviselet hogy kölcsönhatásba keresztül CRUD, könnyen mozog, hogy egy feladat-alapú felhasználói UI.
  • CQRS jól illeszkedik esemény-alapú programozási modellek. Ez gyakori, hogy a CQRS rendszer osztva külön szolgáltatások kommunikál Esemény Együttműködés. Ez lehetővé teszi, hogy ezeket a szolgáltatásokat, hogy könnyen kihasználják Esemény Beszerzése.
  • Miután külön-külön modellek kérdéseket vet fel arról, hogy milyen nehéz megtartani azok a modellek, következetes, ami felveti annak a valószínűsége, használata esetleges következetesség.
  • Sok tartományok, sok logika van szükség, ha frissítjük, így lehet értelme használni EagerReadDerivation, hogy egyszerűsítse a lekérdezés-oldalán modellek.
  • Ha az ír modell generál események minden frissítések szerkezet olvasni modellek, mint EventPosters, amely lehetővé teszi számukra, hogy MemoryImages, így elkerülve a sok adatbázis-kölcsönhatások.
  • CQRS alkalmas komplex tartományok, az a fajta, ami szintén előnyös Domain-Vezérelt Tervezés.

Mikor kell használni

Mint minden minta, CQRS hasznos, néhány helyen, de nem a többiek. Sok rendszerek illik egy CRUD mentális modell, így kellene tenni, hogy a stílus. CQRS jelentős mentális ugrás minden érintett számára, így nem lehet kezelni, kivéve, ha a haszon megéri a folytatásban. Amíg nem találkoznak sikeres használja a CQRS, eddig a legtöbb esetben találkoztam, nem volt annyira jó, a CQRS láttam, mint egy jelentős erő, hogy egy szoftver rendszer komoly nehézségek.

Különösen a CQRS csak akkor használható, külön része a rendszer (egy BoundedContext az DDD nyelven), nem pedig a rendszer egészére. Ez a gondolkodás, minden Bounded Context (Korlátos Összefüggésben)  van szüksége saját döntéseket, hogyan kell mintájára.

Eddig úgy látom, előnyöket két irányban. Először is az, hogy néhány összetett tartományok lehet, hogy könnyebb kezelni segítségével CQRS. Hangsúlyoznom kell azonban, hogy az ilyen alkalmasságát CQRS nagyon sok a kisebbségi ügy. Általában elég közötti átfedés a parancsot, majd a lekérdezés oldalt, hogy megosztási modell könnyebb. Használata CQRS egy olyan domain, ami nem egyezik lesz hozzá komplexitás, így csökkentve a termelékenység növelése, valamint a kockázat.

A másik fő előnye, kezelése nagy teljesítményű alkalmazások. CQRS lehetővé teszi, hogy külön a terhelést olvas, ír, amely lehetővé teszi, hogy a skála egyes függetlenül. Ha az alkalmazás látja, hogy egy nagy különbség a között, olvas, ír, ez nagyon hasznos. Nélkül is, akkor lehet alkalmazni a különböző optimalizációs stratégiák a két oldala. Egy példa erre a különböző adatbázis-hozzáférési technikák olvassa el az update.

Ha a domain nem alkalmas arra, hogy a CQRS, de igényes lekérdezések, hogy hozzá komplexitás vagy teljesítménybeli problémákat, ne feledje, hogy lehet még használni egy ReportingDatabase. CQRS használ egy külön modell valamennyi lekérdezések. A beszámolási adatbázis még mindig használja a rendszer fő a legtöbb lekérdezések, de tehermentesíti a igényesebb is, hogy a beszámolási adatbázis.

Annak ellenére, hogy ezek a juttatások, legyen nagyon óvatos használata CQRS. Sok információs rendszerek jól illeszkednek azzal a gondolattal, hogy egy információs bázis, hogy a frissített ugyanúgy hogy olvassa el, hozzátéve, CQRS, hogy egy ilyen rendszer adhat jelentős komplexitás. Én már biztosan látta az esetekben, ahol ez jelentős húzza a termelékenység, hozzátéve, indokolatlan mennyiségű kockázat, hogy a projekt, még a kezében egy tehetséges csapat. Tehát míg a CQRS egy minta, hogy jó, hogy a toolbox, vigyázz, hogy nehéz használni is könnyedén vágja le a fontos részeket, ha tönkreteszem.

Tovább olvasni

 

Ugrás a kezdőlapra