Model vrstvy odolné proti poškození

Implementujte vrstvu fasády nebo adaptéru mezi různými subsystémy, které nesdílejí stejnou sémantiku. Tato vrstva překládá požadavky, které jeden podsystém provede do druhého subsystému. Tento model použijte, chcete-li zajistit, aby návrh aplikace neomezily závislosti na vnějších subsystémech. Jako první tento model popsal Eric Evans v knize Domain-Driven Design.

Kontext a problém

Většina aplikací spoléhá v souvislosti s daty nebo funkcemi na jiné systémy. Pokud je třeba starší verze aplikace migrována do moderního systému, může dále potřebovat stávající prostředky starší verze. Nové funkce musí být schopny volat starší verzi systému. Toto platí zejména pro postupné migrace, u kterých se různé funkce větších aplikací postupně přesunují do moderního systému.

Tyto starší verze systémů mají často problémy s kvalitou, například se složitými schématy dat a zastaralými rozhraními API. Funkce a technologie použité ve starších verzích systémů se mohou od moderních systémů velmi lišit. Aby mohla nová aplikace spolupracovat se starší verzí systému, může být nutné, aby podporovala zastaralou infrastrukturu, protokoly, datové modely, rozhraní API nebo jiné funkce, které byste jinak u moderní aplikace nepoužili.

Zachování přístupu mezi novou a starší verzí systému může nutit nový systém přizpůsobit se alespoň některým rozhraním API starší verze systému nebo jiné sémantice. Pokud mají tyto starší funkce problémy s kvalitou, může pak jejich podpora „zničit“ jinak zcela správně navrženou moderní aplikaci.

Podobné problémy mohou nastat u všech externích systémů, které váš vývojový tým neřídí, nikoli jenom starších systémů.

Řešení

Rozdělte různé subsystémy tím, že mezi ně umístíte vrstvu odolnou proti poškození. Tato vrstva překládá komunikaci mezi oběma systémy, takže jeden systém zůstane beze změny, zatímco druhý se může vyhnout narušení jeho návrhu a technologického přístupu.

Diagram vzoru vrstvy odolného proti poškození

Výše uvedený diagram znázorňuje aplikaci se dvěma subsystémy. Podsystém A volá podsystém B prostřednictvím vrstvy odolné proti poškození. Komunikace mezi subsystémem a a vrstvou odolnou proti poškození vždy používá datový model a architekturu subsystému a. volání z vrstvy odolné proti poškození do subsystému B v souladu s datovým modelem nebo metodami tohoto subsystému. Vrstva odolná proti poškození obsahuje veškerou logiku potřebnou pro překlad mezi těmito dvěma systémy. Vrstvu můžete implementovat jako komponentu v rámci aplikace nebo jako nezávislou službu.

Problémy a důležité informace

  • Vrstva odolná proti poškození může přidat latenci volání prováděných mezi těmito dvěma systémy.
  • Vrstva odolná proti poškození přidává další službu, kterou je nutné spravovat a udržovat.
  • Zvažte, jak chcete vrstvu odolnou proti poškození škálovat.
  • Zamyslete se, jestli budete potřebovat více vrstev odolných proti poškození. Funkce můžete chtít rozložit do více služeb používajících různé technologie nebo jazyky. K rozdělení vrstvy odolné proti poškození můžete mít i jiné důvody.
  • Zvažte, jak budete vrstvu odolnou proti poškození spravovat vzhledem k ostatním aplikacím nebo službám. Jak se bude integrovat do procesů monitorování, vydávání a konfigurace?
  • Zajistěte, aby byla udržována konzistence transakcí a dat a aby bylo možné ji monitorovat.
  • Zvažte, zda vrstva odolná proti poškození potřebuje zpracovat veškerou komunikaci mezi různými subsystémy nebo pouze podmnožinu funkcí.
  • Pokud je vrstva odolná proti poškození součástí strategie migrace aplikací, zvažte, jestli bude trvalá, nebo se vyřadí po migraci všech starších funkcí.

Kdy se má tento model použít

Tento model použijte v těchto případech:

  • Máte naplánovanou migraci, ke které má dojít v několika fázích, ale potřebujete zachovat integraci mezi novým a starším systémem.
  • Dva nebo více subsystémů mají odlišnou sémantiku, ale stále potřebují komunikovat.

Tento model nemusí být vhodný, pokud mezi novým a starším systémem neexistují žádné závažnější sémantické rozdíly.