Skip to content

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ů


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ší
  • 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