Skip to content

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:

  1. nejdříve jako kontrakt,
  2. poté jako datová struktura,
  3. 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