| Campo | Valor |
|---|---|
| ID | ADR-0059 |
| Estado | ACEPTADO |
| Fecha | 2026-05-15 |
| Decisores | Equipo de Arquitectura |
| Relación Evolith | Override — UMS diverge del baseline de API multi-nivel de Evolith |
Evolith permite dividir las superficies de query y command en niveles de API separados cuando la escala o la propiedad del equipo lo justifica (ej., un query-tier GraphQL dedicado y un command-tier REST separado desplegados independientemente). En la madurez actual de UMS esta división fue evaluada y explícitamente rechazada.
UMS co-localizará las superficies GraphQL (query) y REST (command) en una única unidad de despliegue ums.api usando HotChocolate Minimal APIs en .NET 10.
La separación CQRS se mantiene a nivel de protocolo (GraphQL para lecturas, REST para escrituras) pero no a nivel de despliegue/infraestructura.
| Factor | Análisis |
|---|---|
| Escala | La carga en MVP y producción temprana no justifica el overhead operacional de dos superficies de API desplegadas independientemente |
| CQRS ya enforced | CQRS a nivel de protocolo (GraphQL vs REST) proporciona el aislamiento de lectura/escritura que Evolith intenta, sin costo de infraestructura |
| Tamaño de equipo | Un nivel dividido requiere pipelines CI/CD separados, health checks separados, y políticas de scaling separadas — no costo-efectivo con la dotación actual |
| Riesgo multi-tenant | El riesgo de query compleja se mitiga por gateway rate limiting (TE-07), políticas de timeout, y límites de complejidad en el schema GraphQL — no por aislamiento de niveles |
Esta decisión debe revisarse si cualquiera de las siguientes ocurre:
| Índice ADR | Portal de Arquitectura |