ADR_00009: Žádné sagy – integrace v rámci domény
Status: Proposed / Accepted
Date: 2025-12-29
Context
V některých systémech se pro orchestraci mezi mikroservisami používají SAGA (choreografie nebo orchestrace více transakcí).
Sagy:
- mohou být složité a těžko testovatelné,
- obcházejí explicitní ownership agregátů,
- zvyšují komplexitu při řešení rollbacků a retry,
- často vznikají kvůli rozděleným mikroservisám.
V našem e‑shopu:
- nemáme mikroservisy pro každou doménu, ale monorepa s jasně definovanými core doménami,
- chceme udržet všechny transakce a logiku v rámci domény a agregátů,
- minimalizovat složitost orchestrace.
Decision
- Sagy nebudou použity.
- Integrace probíhá přímo mezi agregáty a doménami přes eventy (Inbox/Outbox + Kafka).
- Všechny procesy, které vyžadují konzistenci, jsou řešeny v rámci domény (authoritative state).
- Orchestrace přes saga engine není potřeba, protože domény nejsou distribuované jako samostatné mikroservisy.
Povolený postup
- Agregát provede stavový přechod.
- Event je publikován přes Kafka / outbox.
- Ostatní domény aktualizují read modely nebo reagují event-driven.
- Žádné cross-service orchestrace sagy, všechny business pravidla jsou uvnitř domény.
Zakázané praktiky
- Používání sag pro orchestraci mezi doménami
- Distribuované transakce přes saga orchestration engine
- Obcházení agregátů a vlastnictví dat
Consequences
Pozitiva
- Jednodušší architektura bez složitých orchestrací
- Jasné ownership agregátů
- Snadnější testování a debug
- Zachování DDD principů
Negativa
- Některé cross-domain scénáře vyžadují pečlivé plánování event-driven workflow
- Eventual consistency musí být akceptována tam, kde je vhodná
Rationale
| Rozhodnutí | Důvod |
|---|---|
| Žádné sagy | Snižuje komplexitu orchestrace a rollbacků |
| Monorepo + core domény | Umožňuje udržet všechny transakce uvnitř domény |
| Event-driven integrace | Podporuje CQRS a eventual consistency bez sag |