CodeDesignPlusException
La clase CodeDesignPlusException
define una excepción personalizada diseñada específicamente para aplicaciones desarrolladas con CodeDesignPlus. Es utilizada principalmente por las cláusulas de guardia para validar reglas y lanzar errores dependiendo de la capa en la que se ejecuten (Domain, Application o Infrastructure).
namespace CodeDesignPlus.Net.Exceptions;
/// <summary>/// Represents a custom exception for CodeDesignPlus applications./// </summary>public class CodeDesignPlusException : Exception{ /// <summary> /// Gets or sets the layer where the exception occurred. /// </summary> public Layer Layer { get; set; }
/// <summary> /// Gets or sets the error code associated with the exception. /// </summary> public string Code { get; set; }
/// <summary> /// Initializes a new instance of the <see cref="CodeDesignPlusException"/> class with the specified layer and error code. /// </summary> /// <param name="layer">The layer where the exception occurred.</param> /// <param name="code">The error code associated with the exception.</param> public CodeDesignPlusException(Layer layer, string code) { this.Code = code; this.Layer = layer; }
/// <summary> /// Initializes a new instance of the <see cref="CodeDesignPlusException"/> class with the specified layer, error code, and error message. /// </summary> /// <param name="layer">The layer where the exception occurred.</param> /// <param name="code">The error code associated with the exception.</param> /// <param name="message">The message that describes the error.</param> public CodeDesignPlusException(Layer layer, string code, string message) : base(message) { this.Code = code; this.Layer = layer; }
/// <summary> /// Initializes a new instance of the <see cref="CodeDesignPlusException"/> class with the specified layer, error code, error message, and a reference to the inner exception that is the cause of this exception. /// </summary> /// <param name="layer">The layer where the exception occurred.</param> /// <param name="code">The error code associated with the exception.</param> /// <param name="message">The message that describes the error.</param> /// <param name="innerException">The exception that is the cause of the current exception.</param> public CodeDesignPlusException(Layer layer, string code, string message, Exception innerException) : base(message, innerException) { this.Code = code; this.Layer = layer; }}
Propiedades
Layer
(Layer): Representa la capa del sistema donde se originó la excepción (por ejemplo, Domain, Application, Infrastructure).Code
(string): Código único que identifica el error asociado con la excepción. Los códigos están organizados según la capa, siguiendo estas recomendaciones:- 000: Errores internos genéricos.
- 100: Errores de la capa Domain.
- 200: Errores de la capa Application.
- 300: Errores de la capa Infrastructure.
Formato de Mensajes de Error
Los mensajes de error lanzados por CodeDesignPlusException deben seguir el formato: <code>: <message>
Ejemplo
public const string InvalidBussinessRule = "100: Invalid business rule."
Constructores
Constructor básico
Inicializa una nueva instancia de la clase CodeDesignPlusException con la capa y el código de error.
Parámetros:
- layer (Layer): La capa donde ocurrió la excepción.
- code (string): Código del error.
Ejemplo de uso:
throw new CodeDesignPlusException(Layer.Application, "200");
Constructor con mensaje
Inicializa una nueva instancia de la clase CodeDesignPlusException con la capa, el código de error y un mensaje descriptivo.
Parámetros:
- layer (Layer): La capa donde ocurrió la excepción.
- code (string): Código del error.
- message (string): Mensaje que describe el error.
Ejemplo de uso:
throw new CodeDesignPlusException(Layer.Domain, "100", "Invalid business rule.");
Constructor con excepción interna
Inicializa una nueva instancia de la clase CodeDesignPlusException con la capa, el código de error, un mensaje descriptivo y una referencia a una excepción interna.
Parámetros:
- layer (Layer): La capa donde ocurrió la excepción.
- code (string): Código del error.
- message (string): Mensaje que describe el error.
- innerException (Exception): Excepción interna que causó el error actual.
Ejemplo de uso:
try{ // Código que puede generar una excepción}catch (Exception ex){ throw new CodeDesignPlusException(Layer.Infrastructure, "300", "Database connection failed.", ex);}
Escenarios de Uso
-
Excepciones lanzadas por cláusulas de guardia
CodeDesignPlusException se utiliza para validar reglas en diferentes capas del sistema.
Ejemplo:
ApplicationGuard.Requires(() => input != null, new CodeDesignPlusException(Layer.Application, "200", "Input cannot be null.")); -
Estandarización de errores Utilice los códigos y el formato de mensaje recomendados para mantener la consistencia en el manejo de excepciones.
-
Integración con middlewares Capture y transforme las excepciones CodeDesignPlusException en respuestas estructuradas para el cliente.
Ejemplo:
app.Use(async (context, next) =>{try{await next();}catch (CodeDesignPlusException ex){var errorResponse = new ErrorResponse(Guid.NewGuid().ToString(), ex.Layer);errorResponse.AddError(ex.Code, $"{ex.Code}: {ex.Message}", string.Empty);context.Response.ContentType = "application/json";context.Response.StatusCode = StatusCodes.Status400BadRequest;await context.Response.WriteAsJsonAsync(errorResponse);}});