ADR_00003: Per interface / project repo vs Monorepo per doména
Status: Proposed / Accepted
Date: 2025-12-30
Context
Architektura e-shopu je založena na DDD s více core doménami (např. Checkout, Order, Stock, Pricing).
Každá doména má různé typy vstupních bodů:
- WebAPI – read-modely, UX-oriented, bez agregátů
- ERPAPI – read-modely, UX-oriented, bez agregátů
- gRPC / Worker – machine-to-machine komunikace, write-heavy, orchestrace, eventy, retry, DLQ
Cílem je:
- minimalizovat duplikaci kódu,
- zachovat konzistenci architektury napříč vstupy,
- umožnit snadný vývoj a refactoring,
- udržet jasné hranice mezi doménovou logikou a technickou infrastrukturou.
Decision
Primární doporučení: Per interface / project repo
- Každý vstupní bod má vlastní repozitář:
webapi/erpapi/worker/+grpc/- Worker a gRPC jsou centrem změn, spojuje je Agregát
- Každý repozitář obsahuje:
- vlastní presentation layer
- domain, application a infrastructure
- Sdílená logika a eventy jsou přes event-driven architekturu, žádné sdílené balíčky domény
Vlastnosti:
- WebAPI, ErpAPI je lean, pouze read-modely
- Pro změny agregátu se volá gRPC služba
- gRPC/Worker obsahují kompletní DDD stack
- Každý repozitář má vlastní CI/CD a release cycle
- Jasné vlastnictví a izolace týmů
Rationale
| Rozhodnutí | Důvod |
|---|---|
| Per interface / project repo | Lepší izolace a ownership týmů, optimalizace pro SLA jednotlivých vstupů |
| Lean WebAPI, ErpAPI | Minimalizace zbytečných závislostí, pouze read-modely |
| gRPC / Worker | Kompletní DDD stack pro write-heavy procesy |
| Sdílená logika přes eventy | Zachování konzistence bez sdílených doménových balíčků |
Návaznost na:
- ADR_00001: Core domény – komunikační kanály a integrační vzory
- ADR0_0002: Struktura core domén – vrstvy aplikace a sdílená infrastruktura
Considered Alternatives
-
Monorepo per doména
- Každá core doména vlastní monorepo:
catalog/,pricing/,stock/,orders/,checkout/
- Obsahuje všechny vstupy: WebAPI, ERPAPI, Worker, gRPC
- Sdílená struktura vrstev napříč vstupy
- Výhody:
- Jednotná architektura domény
- Sdílená business logika pro všechny vstupy
- Snadné testování a refactoring uvnitř domény
- Nevýhody:
- WebAPI nepotřebuje agregáty → zbytečné závislosti
- CI/CD složitější, protože Web, ERP, Worker mají různé release SLA
- Repozitář větší a složitější
- Každá core doména vlastní monorepo:
-
gRPC a Worker odděleně
- Každá doména by měla základní 4 repa
- WebAPI, ERPAPI, Worker, gRPC
- Vlastní implementace Agregátu v RPC a Worker službách, nebo sdílený balíček
- Výhody:
- Jednodušší release proces
- Nevýhody:
- Náročná udržitelnost a synchronizace agregátů Worker x RPC
- Každá doména by měla základní 4 repa