../constitution/founding-constitution.md
Traducción. Autoritativo: ../../adr/adr-003-hexagonal-and-ports.md.
⚠️ Reconstruido a partir del material que tenemos, no recuperado. Etiquetas: [derived] tiene
respaldo en el repositorio · [inferred] es deducido · [proposed] es un hueco que llené.
Contexto
Una plataforma que pretende sobrevivir a sus vendors tiene que poder reemplazar uno sin una reescritura. La respuesta habitual es “usa interfaces”, que se degrada porque nadie se pone de acuerdo en qué amerita una — y en un código donde los agentes escriben la mayor parte, ese desacuerdo se compone cada semana. [inferred]Decisión
Arquitectura hexagonal sin excepción. [derived] El código de dominio y de aplicación depende de puertos. Un SDK de vendor importado fuera de un archivo de adaptador es un defecto, impuesto por lint. La lista de categorías de puerto es cerrada. [derived] Existen seis categorías; agregar una exige una enmienda de constitución revisada línea por línea por el owner. Ese cierre es la parte que carga el peso: sin él, “usa un puerto” se convierte en “inventa una abstracción”, y una abstracción inventada por pull request es peor que ninguna. Los bindings se declaran en el composition root de cada módulo,makeDeps(ctx). [derived]
Las seis categorías están reconstruidas con baja confianza en
../constitution/founding-constitution.md Parte 2.
[inferred] La enmienda A1 agrega QueuePort y NotificationChannelPort como siete y ocho.
Consecuencias
- Un cambio de vendor es un adaptador más un ADR, no una migración.
- Los agentes no pueden inventar abstracciones, porque la lista de las permitidas es finita y nombrada. − Algunas abstracciones genuinamente útiles quedarán bloqueadas hasta una enmienda. Ese costo se acepta: el rito de la enmienda es barato y raro, y la alternativa no tiene límite.
Lo que no pude determinar
Si la base de datos y la autenticación se excluyeron deliberadamente de la lista de puertos o simplemente nunca surgieron. ElgetDb(tenantCtx) de R8 sugiere exclusión deliberada. [inferred]