ADR_00001: Core domény – komunikační kanály a integrační vzory
Status: Proposed / Accepted
Date: 2025-12-28
Context
V našem e-shopu používáme DDD s Core, Supporting, Generic doménami a Channely.
Mezi core domény patří například:
- Checkout
- Order
- Stock
- Pricing
Tyto domény musí komunikovat:
- s WEB klienty,
- s interními systémy (ERP),
- mezi sebou navzájem (machine-to-machine),
- a podporovat event-driven orchestraci.
Cílem je mít jasně oddělené integrační kanály, vysokou spolehlivost a možnost dalšího rozšiřování bez zásahu do doménové logiky.
Decision
Pro core domény je zavedena následující integrační architektura:
REST API pro WEB klienty
- Každá core doména poskytuje veřejné REST endpointy.
- Slouží pro:
- webový frontend,
- synchronní operace,
- dotazy a příkazy.
Vlastnosti:
- Primárně synchronní komunikace,
- zaměřeno na UX,
- stabilní kontrakt.
REST API pro ERP
- Samostatné REST endpointy určené pro ERP.
- Oddělené od webového API:
- jiný path (
/api/erp/...), - nebo jiná verze.
Důvody:
- oddělení změn frontendu a ERP,
- stabilní integrační rozhraní,
- možnost odlišného řízení bezpečnosti a případně verzování.
Worker + Inbox / Outbox pattern
Každá doména implementuje asynchronní workery, které:
- čtou inbox eventy z ostatních domén,
- publikují outbox eventy,
- zajišťují:
- spolehlivé doručení
- retry mechanizmy
- idempotenci
- eventual consistency
Použití:
- integrace mezi doménami
- synchronizace stavů
- orchestrace procesů
gRPC pro machine-to-machine komunikaci
- Použito pro:
- nízkou latenci,
- vysoký výkon,
- streaming,
- interní orchestraci.
- Jasný interface
Consequences
Pozitiva
- Jasné oddělení synchronní a asynchronní komunikace
- Definované integrační rozhraní pro každý typ klienta
- Snadná rozšiřitelnost systému
- Podpora event-driven architektury
- Připravenost na CQRS
Negativa / náklady
- Vyšší komplexita systému
- Nutnost:
- monitoringu,
- observability,
- retry mechanismů,
- DLQ / error handlingu
Rationale
| Rozhodnutí | Odůvodnění |
|---|---|
| REST pro WEB | Jednoduché, standardní API pro frontend |
| REST pro ERP | Oddělení integrací a stabilní kontrakt |
| Inbox / Outbox | Spolehlivá asynchronní komunikace |
| Event-driven přístup | Podpora CQRS a loose coupling |
| gRPC | Nízká latence a efektivní M2M komunikace |
Considered Alternatives
-
Použití microservices pro každou doménu
- Pozitiva: nezávislé deploye
- Negativa:
- složitější orchestrace
- více operational overhead
- Nutnost distribuovaných transakcí
-
Použití shared database místo eventů
- Pozitiva: jednoduché dotazy napříč doménami
- Negativa: silný coupling, ztráta auditability
-
Monolit pro celkovou orchestraci
- Pozitiva:
- Jednodušší release
- Jednodušší verzování
- Negativa:
- Nemožnost škálovat
- Složité oddělování integračních rozhraní v případě security etc
- Pozitiva: