ADR_00013: Contract-first event design
Status: Proposed / Accepted
Date: 2025-12-30
Context
Systém využívá event-driven architekturu pro komunikaci mezi doménami.
Bez jasných pravidel pro návrh eventů hrozí:
- vznik technických „dump“ eventů,
- nejasný význam eventů,
- silná vazba na interní datové struktury,
- obtížná evoluce a integrace.
Eventy nesmí být vedlejším produktem databázových změn.
Decision
Event je kontrakt, ne technický artefakt
Každý event:
- reprezentuje business událost,
- má jasně definovaný význam,
- má jednoznačného vlastníka (doménu),
- existuje nezávisle na interní struktuře databáze.
Event má vlastní identitu
Každý event:
- má název vyjadřující business význam,
- má explicitní schéma,
- není odvozen přímo z entity.
Zakázané jsou: - „EntityChanged“ - „RowUpdated“ - „Snapshot exporty“
Contract-first přístup
Event je navržen:
- nejdříve jako kontrakt,
- poté jako datová struktura,
- až následně jako výstup aplikační logiky.
Producent se řídí kontraktem, nikoliv naopak.
Consequences
Pozitiva
- Stabilní integrační rozhraní
- Čitelné a srozumitelné eventy
- Snadná spolupráce mezi týmy
- Menší závislost na interní implementaci
Negativa
- Vyšší nároky na návrh
- Nutnost dokumentace eventů
- Pomalejší změny
Rationale
| Rozhodnutí | Důvod |
|---|---|
| Event jako kontrakt | Zajišťuje stabilitu |
| Zákaz technických eventů | Zamezuje coupling |
| Jasná identita | Čitelnost a evoluce |
| Contract-first | Kontrola změn |