Ohraničený kontext určuje sféru platnosti jedného doménového modelu a jeho jazyka. Vo vnútri tejto hranice by mali byť pojmy, identifikátory, pravidlá a vlastníctvo konzistentné. Mimo nej však môže iná časť biznisu reprezentovať rovnakú vec z reálneho sveta odlišne, pretože ju využíva na iné účely.
Prečo jeden model niekedy nestačí
Legacy aplikácia môže používať jeden spoločný záznam pre predaj, fakturáciu, podporu a reportovanie. Každá z týchto oblastí pritom vyžaduje iné polia a pravidlá. Ak sa s takýmto záznamom zaobchádza ako s jedným univerzálnym modelom, zmena vykonaná pre jednu oblasť nevyhnutne ovplyvní všetky ostatné.
| Otázka | Čo odhaľuje | Signál hranice |
|---|---|---|
| Čo tu tento pojem znamená? | Lokálny biznisový jazyk | Významy sa v jednotlivých oblastiach líšia |
| Kto mení toto pravidlo? | Vlastníctvo rozhodnutí | Rôzni vlastníci alebo smernice |
| Ktoré dáta sú autoritatívne? | Zdroj pravdy (source of truth) | Samostatná zodpovednosť za zápis |
| Čo sa mení spoločne? | Súdržnosť (cohesion) | Stabilné skupiny správania |
Ohraničený kontext počíta s tým, že modely sa môžu líšiť. Integrácia medzi nimi sa tak stáva explicitným kontraktom namiesto náhodného používania zdieľaného vnútra systému.
Hľadanie kontextov v legacy kóde
Názvy priečinkov málokedy poskytujú dostatok dôkazov. Súčasná štruktúra môže kopírovať technické vrstvy, niekdajšie hranice tímov alebo konvencie frameworku. Audit legacy kódu (legacy codebase audit) spája dôkazy z kódu s jazykom, ktorý používajú ľudia prevádzkujúci daný systém.
Mapovanie zahŕňa najmä tieto aktivity:
- Sledovanie biznisových procesov (trace business workflows). Sledovanie úlohy od jej vstupného bodu cez pravidlá a úložisko až po externé volania.
- Zaznamenávanie slovnej zásoby (record vocabulary). Hľadanie miest, kde to isté slovo označuje odlišné polia, stavy alebo rozhodnutia.
- Určenie vlastníctva zápisov (locate write ownership). Identifikácia kódu, ktorý má oprávnenie vytvárať alebo meniť konkrétne záznamy.
- Skúmanie histórie zmien (inspect change history). Vyhľadávanie kódu, ktorý sa opakovane upravuje z rovnakého biznisového dôvodu.
- Označenie integrácií (mark integrations). Dokumentovanie volaní a presunov dát medzi navrhovanými kontextmi.
Výsledkom je hypotéza, ktorú tím následne overuje voči skutočnému správaniu systému. Nedá sa odvodiť čisto iba z počtu tried alebo databázových tabuliek.
Od kontextu k hranici v kóde
Ohraničený kontext predstavuje hranicu modelu, nie vyžadovaný štýl nasadenia. Môže sa stať modulom vo vnútri modulárneho monolitu, alebo slúžiť ako základ pre jednu či viac samostatne nasadených služieb. Výber závisí od potrieb vydávania verzií, škálovania, spoľahlivosti a vlastníctva.
V miestach interakcie kontextov by mal kontrakt presne pomenovať vymieňané dáta a správanie. Keď nový kontext potrebuje spolupracovať s legacy modelom, ktorého terminológia a pravidlá by nemali prenikať do nového návrhu, preklad môže zabezpečiť Izolačná vrstva medzi systémami (Anti-Corruption Layer).
Čo zaznamenáva audit
Audit legacy kódu dokumentuje každý navrhovaný kontext, jeho jazyk, vlastnené dáta, verejné operácie, volajúcich a závislosti. Označuje tiež nevyriešené oblasti, kde je vlastníctvo zdieľané alebo sa rovnaké pravidlo objavuje na viacerých miestach.
Táto mapa určuje poradie, v akom prebehne refaktoring. Tím môže posilniť internú hranicu pred tým, než sa uskutoční vyčlenenie služby, alebo ju ponechať vo vnútri monolitu, ak samostatné nasadenie nemá jasný účel. Ohraničený kontext poskytuje sémantickú hranicu, zatiaľ čo migračný plán určuje, ako a kedy sa zmení hranica softvéru.