Skip to content
Language:hu Author:Laborci Gergely
architecture

Határok keresése: kohézió, csatolás és bounded context

Célok

A lecke végére el tudod magyarázni a kohézió és a csatolás különbségét, meg tudod mondani, mit jelent a bounded context és az adatgazda, és fel tudod ismerni a rosszul húzott határ jeleit.

Miért a határ a kulcskérdés?

Minden architektúra — monolit, modulit vagy szolgáltatások — határok rendszere. A stílus csak azt dönti el, mennyire erős és mennyire költséges a határ. Ha a határ rossz helyen van, egyik stílus sem segít: a hibás felbontást a szolgáltatások közötti hálózat csak drágábbá teszi.

Kohézió és csatolás

A kohézió azt fejezi ki, mennyire tartoznak össze egy egység felelősségei. Magas a kohézió, ha a benne levő dolgok együtt változnak és közös szabályokat szolgálnak.

A csatolás az egységek közötti függés mértéke. Kicsi a csatolás, ha egy egység csak egy stabil, jól elnevezett műveletet használ egy másiktól; nagy, ha a másik belső szerkezetét vagy adatát is ismeri.

A cél a magas belső kohézió és a kezelhető külső csatolás. Teljes függetlenség nem reális: az egységek végül együtt adnak ki egy működő rendszert.

Bounded context

Egy fogalom jelentése a szervezet különböző részein eltérhet. A „termék” a katalógusban leírás és kép, a raktárban mozgás és darabszám, a számlázásban adózási adat. Ha mindent egyetlen közös modellbe kényszerítenek, az mindenkinek útban lesz.

A bounded context (körülhatárolt kontextus) az a határ, amelyen belül egyetlen modell következetesen érvényes. Martin Fowler leírása szerint a nagy modelleket ilyen kontextusokra bontják, és a kontextusok kapcsolatát kifejezetten megadják. A kontextus nem azonos egy szolgáltatással: a határkeresés jó kiindulópontja, de egy kontextust megvalósíthat modul vagy szolgáltatás is, és egy szolgáltatás is hordozhat több kontextust.

Adatgazda

Minden módosítható üzleti adatnak egyetlen adatgazdája van: az az egység, amely az adat szabályait érvényesíti és a módosításokat végrehajtja. A fogyasztó kérdezhet, vagy tarthat másolatot, de a szabályokat a gazda érvényesíti.

Ha több egység egymástól függetlenül írja ugyanazt az adatot, az felelősség és szerződés nélküli csatolást jelent: a séma módosítása mindenkit érint. A saját adat és a hozzá tartozó szabályok együtt adják a határ egyik legerősebb tesztjét.

flowchart LR
  A["Egység A:<br/>saját szabályok és adat"] -->|"szerződés"| B["Egység B"]
  B -.->|"nem ír közvetlenül A adatába"| A

Hogyan ismerhető fel a rossz határ?

Érdemes egy konkrét üzleti műveletet venni, és felírni, mely egységek, adatok és hívások kellenek hozzá.

Jel Mire utal?
Két egység minden kérésben sokszor oda-vissza kommunikál Túl apró felbontás, a kohézió a határon átnyúlik
Szinte minden módosítás ugyanazt a három egységet érinti A határ nem követi a változás természetét
Több egység ugyanazt az adatot írja Hiányzik az adatgazda
Az egységek nevei entitásnevek (Felhasználó, Cím, E-mail) Adatmodell-szerinti, nem felelősség-szerinti vágás
Egy egység sok, eltérő okból változó felelősséget fog össze Túl durva felbontás

A méret önmagában nem mérce. Az együtt változás, az adatgazda és az igényelt tranzakciós garancia ad használható támpontot.

Gyakori tévhitek

Állítás Pontosítás
„Egy bounded context egy mikroszerviz.” Egy kontextus megvalósulhat modulként, szolgáltatásként vagy több szolgáltatásként is.
„A szoros csatolás mindig rossz.” Egy egységen belül kívánatos; a baj a rejtett és a határokon átnyúló csatolás.
„Minden adatot csak egy helyen szabad tárolni.” Másolat lehet; az eredeti adat szabályait azonban a gazda érvényesíti.
„Ha kicsi a szolgáltatás, jó a felbontás.” A méret helyett az együtt változás és az adatgazda számít.

Röviden

  • A határ jó, ha belül nagy a kohézió, kívül kezelhető a csatolás.
  • A bounded context olyan határ, amelyen belül egy modell következetes.
  • Minden módosítható adatnak egy gazdája van.
  • A rossz határ jele a sok oda-vissza hívás, a közös írás és az együtt változó egységek.

Ellenőrző kérdések

  1. Mi különbözteti meg a kohéziót a csatolástól?
  2. Miért lehet ugyanaz a fogalom (például „termék”) két kontextusban eltérő?
  3. Milyen jelek utalnak arra, hogy egy felbontás túl apró?

Források

Prerequisites (1)

  • minőségi jellemzők

Teaches (3)

  • kohézió és csatolás
  • bounded context
  • adatgazda