Patroon Anti-corruptielaag
Implementeer een gevel- of adapterlaag tussen verschillende subsystemen die niet dezelfde semantiek delen. Deze laag vertaalt aanvragen die door het ene subsysteem naar het andere subsysteem worden verzonden. Gebruik dit patroon om ervoor te zorgen dat het ontwerp van een toepassing niet wordt beperkt door afhankelijkheden van externe subsystemen. Dit patroon werd voor het eerst beschreven door Eric Evans in Domain-Driven Design.
Context en probleem
De meeste toepassingen zijn afhankelijk van andere systemen voor bepaalde gegevens of functionaliteit. Wanneer een verouderde toepassing bijvoorbeeld naar een modern systeem wordt gemigreerd, heeft deze mogelijk nog steeds bestaande verouderde resources nodig. Nieuwe functies moeten het verouderde systeem kunnen aanroepen. Dit geldt met name voor geleidelijke migraties, waarbij verschillende functies van een grotere toepassing in de loop van de tijd naar een modern systeem worden verplaatst.
Deze verouderde systemen hebben vaak last van kwaliteitsproblemen, zoals samengevoegde gegevensschema's of verouderde API's. De functies en technologieën die worden gebruikt in verouderde systemen kunnen sterk verschillen van modernere systemen. Als u wilt samenwerken met het verouderde systeem, moet de nieuwe toepassing mogelijk verouderde infrastructuur, protocollen, gegevensmodellen, API's of andere functies ondersteunen die u anders niet in een moderne toepassing zou plaatsen.
Het onderhouden van toegang tussen nieuwe en verouderde systemen kan ertoe dwingen dat het nieuwe systeem zich houdt aan ten minste een deel van de API's van het verouderde systeem of andere semantiek. Wanneer deze verouderde functies kwaliteitsproblemen hebben, worden deze 'beschadigd' ondersteund, wat anders een schone moderne toepassing kan zijn.
Vergelijkbare problemen kunnen zich voordoen met elk extern systeem dat uw ontwikkelteam niet controleert, niet alleen verouderde systemen.
Oplossing
Isoleer de verschillende subsystemen door er een anti-corruptielaag tussen te plaatsen. Deze laag vertaalt de communicatie tussen de twee systemen, waardoor het ene systeem ongewijzigd blijft, terwijl de andere de ontwerp- en technologische benadering in gevaar kan brengen.
In het bovenstaande diagram ziet u een toepassing met twee subsystemen. Subsysteem A roept subsysteem B aan via een anti-corruptielaag. Communicatie tussen subsysteem A en de anticorruptielaag maakt altijd gebruik van het gegevensmodel en de architectuur van subsysteem A. Aanroepen van de anti-corruptielaag naar subsysteem B voldoen aan het gegevensmodel of de methoden van dat subsysteem. De anticorruptielaag bevat alle logica die nodig is om tussen de twee systemen te vertalen. De laag kan worden geïmplementeerd als onderdeel binnen de toepassing of als een onafhankelijke service.
Problemen en overwegingen
- De anti-corruptielaag kan latentie toevoegen aan aanroepen tussen de twee systemen.
- De anti-corruptielaag voegt een extra service toe die moet worden beheerd en onderhouden.
- Bedenk hoe uw anti-corruptielaag wordt geschaald.
- Overweeg of u meer dan één anti-corruptielaag nodig hebt. Mogelijk wilt u functionaliteit in meerdere services opsmalen met behulp van verschillende technologieën of talen, of er zijn andere redenen om de anti-corruptielaag te partitioneren.
- Overweeg hoe de anti-corruptielaag wordt beheerd in relatie tot uw andere toepassingen of services. Hoe wordt deze geïntegreerd in uw bewakings-, release- en configuratieprocessen?
- Zorg ervoor dat transactie- en gegevensconsistentie behouden blijven en kan worden bewaakt.
- Overweeg of de anti-corruptielaag alle communicatie tussen verschillende subsystemen moet verwerken, of alleen een subset van functies.
- Als de anti-corruptielaag deel uitmaakt van een strategie voor toepassingsmigratie, moet u overwegen of deze permanent is of buiten gebruik wordt gesteld nadat alle verouderde functionaliteit is gemigreerd.
- Dit patroon wordt geïllustreerd met verschillende subsystemen hierboven, maar kan ook worden toegepast op andere servicearchitecturen, zoals bij het integreren van verouderde code in een monolithische architectuur.
Wanneer gebruikt u dit patroon?
Gebruik dit patroon wanneer:
- Er is een migratie gepland in meerdere fasen, maar de integratie tussen nieuwe en verouderde systemen moet worden gehandhaafd.
- Twee of meer subsystemen hebben verschillende semantiek, maar moeten nog steeds communiceren.
Dit patroon is mogelijk niet geschikt als er geen significante semantische verschillen zijn tussen nieuwe en verouderde systemen.
Workloadontwerp
Een architect moet evalueren hoe het anticorruptielaagpatroon kan worden gebruikt in het ontwerp van hun workload om de doelstellingen en principes te verhelpen die worden behandeld in de pijlers van het Azure Well-Architected Framework. Voorbeeld:
Pilaar | Hoe dit patroon ondersteuning biedt voor pijlerdoelen |
---|---|
Operational Excellence helpt workloadkwaliteit te leveren via gestandaardiseerde processen en teamcohesie. | Dit patroon helpt ervoor te zorgen dat het ontwerp van nieuwe onderdelen niet wordt beïnvloed door verouderde implementaties die mogelijk verschillende gegevensmodellen of bedrijfsregels hebben wanneer u integreert met deze verouderde systemen en dat het technische schulden in nieuwe onderdelen kan verminderen terwijl bestaande onderdelen nog steeds worden ondersteund. - OE:04 Hulpprogramma's en processen |
Net als bij elke ontwerpbeslissing moet u rekening houden met eventuele compromissen ten opzichte van de doelstellingen van de andere pijlers die met dit patroon kunnen worden geïntroduceerd.