Skip to content

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

  1. Změna stavu proběhne v agregátu.
  2. Agregát vytvoří domain event.
  3. Event se uloží do outboxu.
  4. Event je publikován ostatním doménám.
  5. 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ů