ADR_00006: Event-driven integrace – žádné CDC
Status: Proposed / Accepted
Date: 2025-12-29
Context
V některých systémech se pro propagaci změn dat používá CDC (Change Data Capture):
- Sleduje změny v databázi mimo doménovou logiku
- Obchází agregáty a pravidla domény
- Může vést k nekonzistenci a neřízeným závislostem
V našem DDD e‑shopu chceme, aby:
- všechny změny probíhaly v rámci agregátů,
- každá změna byla auditovatelná a generovala domain event,
- synchronizace probíhala pouze eventy, nikoli sledováním databáze.
Decision
Žádné CDC
- Není povoleno používat CDC ani jiné mechanismy, které obcházejí doménovou logiku.
- Každý stavový přechod agregátu generuje domain event.
- Eventy mohou být publikovány přes Inbox/Outbox pattern.
- Ostatní domény přijímají eventy a aktualizují své read modely.
- Synchronní dotazy na cizí domény jsou povoleny pouze pro ověření stavu, nikdy pro zápis.
Povolený postup
- Změna stavu proběhne v agregátu.
- Agregát vytvoří domain event.
- Event se uloží do outboxu.
- Event je publikován ostatním doménám.
- Ostatní domény:
- přijmou event do inboxu,
- aktualizují vlastní read model,
- nijak nezasahují do původního agregátu.
Zakázané praktiky
- Použití CDC nebo podobného mechanismu pro detekci změn
- Přímé čtení nebo zápis do cizí databáze
- Přímá závislost na schématu jiné domény
Consequences
Pozitiva
- Doménová logika je vždy centrálně v agregátu
- Event-driven integrace zachovává DDD principy
- Auditovatelnost všech změn
- Jasné oddělení domén
- Eventual consistency bez ztráty integrity
Negativa
- Vyžaduje robustní event handling a retry mechanizmy
- Složitější debug a monitoring
- Nutnost plánovat read modely a orchestraci eventů
Rationale
| Rozhodnutí | Důvod |
|---|---|
| Zakázat CDC | Prevence obcházení domény a logiky agregátů |
| Vše v agregátu | Zachování integrity domény |
| Eventy z kódu | Auditovatelné, garantované doručení |
| Inbox/Outbox | Podpora asynchronní integrace a CQRS read modelů |