Shared Kernel y contratos
Qué elementos conviene compartir entre repositorios y servicios, y cómo evitar que lo compartido se convierta en una fuente de acoplamiento.
¿Qué es un Shared Kernel?
Es un conjunto pequeño de conceptos compartidos entre varias partes del sistema.
Puede incluir:
- value objects muy estables
- contratos técnicos mínimos
- utilidades realmente transversales
- tipos comunes
Qué sí conviene compartir
UUIDEmailMoney- Interfaces técnicas muy estables
- Ciertos eventos o contratos bien gobernados
Qué no conviene compartir demasiado
- Modelos completos del dominio
- DTOs que cambian con frecuencia
- Lógica de negocio
- Estructuras que obliguen a todos a versionar al mismo tiempo
Riesgo principal
Si el shared kernel crece sin control, se convierte en una dependencia global que:
- acopla equipos
- obliga a coordinar releases
- dificulta evolución independiente
Contratos explícitos
Más allá del shared kernel, lo importante es que existan contratos claros entre componentes:
- APIs
- eventos
- interfaces
- schemas
Compartir no debería significar mezclar contextos.
Resumen
Un shared kernel pequeño puede ayudar. Uno grande suele recrear el problema que intentabas evitar: el acoplamiento.