Apariencia
Estructuras fijas: familias tipadas
Una estructura fija declara mediante tipos las relaciones entre razones. Fija el contrato de composición, no la cantidad de nodos: cada fallo puede incluir distintas causas compatibles con ese contrato.
Un árbol de diagnóstico conserva qué falló, dónde ocurrió y por qué. La raíz identifica el fallo; sus razones añaden contexto y pueden contener otras razones.
text
Raíz: importación fallida
└── Contexto: fila 12
└── Contexto: celda B12
└── Causa: valor obligatorioUna familia de diagnóstico define la raíz y los tipos de razones que se pueden relacionar. Cada error construido es una instancia de ese diseño. En una familia tipada, cada razón declara el tipo de su padre.
Familias disponibles
| Familia | Raíz | Organización |
|---|---|---|
| Dominio | DomainError | Entidades, propiedades y validaciones |
| Procesos | ProcessError | Excepción, timeout, cancelación y otras causas de ejecución |
| Propia | Error<TSelf>, DomainError<TSelf> o ProcessError | Niveles definidos por la aplicación |
La familia de procesos pertenece a Greencore.Platform.Processes. La infraestructura común pertenece a Greencore.Platform.Errors. Los proyectos actuales requieren .NET 10.
Contrato compartido
La raíz deriva de Error; tanto raíces como razones implementan INode. Exponen Message, Reasons, OwnedReasons, Metadata y Parent. Las colecciones son de solo lectura.
| Operación | Devuelve | Propósito |
|---|---|---|
AddReason(...) | Hijo agregado | Continuar construyendo dentro del hijo |
WithReason(...) | Receptor | Agregar causas al mismo nivel |
WithMetadata(...) | Receptor | Asociar información adicional |
ToString() | Texto | Mostrar el diagnóstico |
Un hijo propio tiene un único padre. La raíz tiene Parent == null. Las APIs rechazan ciclos y pertenencias incompatibles. Para compartir una causa existente consulta referencias de errores.
Qué aporta el tipado
El compilador comprueba las relaciones declaradas: una razón de celda puede exigir una fila como padre. Los consumidores reconocen tipos y propiedades sin interpretar mensajes como “Fila 12”.
El contrato limita el padre de cada razón; no establece una lista cerrada de hijos. Se pueden definir nuevos tipos de razones para un padre existente. Las familias genéricas también permiten razones textuales vinculadas al padre.
Los códigos de DomainError, DomainReason y ProcessReason son identificadores independientes del mensaje. Las propiedades específicas, como una coordenada, no se convierten automáticamente en metadatos ni necesariamente aparecen en el formato textual.
Elegir y continuar
- Dominio: entidades, propiedades y validaciones.
- Procesos: causas de ejecución.
- Familias personalizadas para Excel.
- Árboles tipados vs. composición libre.
- Recorrer y consultar errores.
Construir un diagnóstico registra un fallo detectado. No ejecuta validaciones, lee archivos ni inicia operaciones.