Tengo un empleado de la clase. Quiero poder Validarlo() antes de guardarlo para asegurarme de que todos los campos se hayan rellenado con valores válidos. El usuario de la clase puede llamar a Validate() antes de llamar a Save() o puede llamar a Save() directamente y Save() llamará a Validate() y probablemente lanzará una excepción si la validación falla.Práctica recomendada para devolver información adicional de una función Validar
Ahora, mi (principal) pregunta es esta;
Si mi función Validate() devuelve un bool simple, ¿cómo le digo al usuario de la clase qué es lo que está mal, es decir, "Correo electrónico no rellenado", "ID no único", etc. Para este propósito, solo quiero cadenas de error para pasar al usuario humano, pero el principio es el mismo si quiero una lista de códigos de error (excepto que hace que el uso de un mapa de bits sea más lógico).
- Podría utilizar un parámetro de salida en mi función Validar pero entiendo que esto está mal visto.
- En lugar de devolver un bool, podría devolver un conjunto de cadenas de mi función y simplemente probar si estaba vacío (es decir, sin errores), pero eso parece desordenado y no correcto.
- Podría crear un Struct solo para regresar de este método, incluyendo un bool y una matriz de cadenas con mensajes de error, pero parece torpe.
- Podría devolver un mapa de bits de códigos de error en lugar de un bool y buscarlo, pero parece bastante excesivo.
- Podría crear una propiedad pública "ValidationErrors" en el objeto que contendría los errores. Sin embargo, eso dependería de que llame a Validate() antes de leerlo o llamar explícitamente a Validate desde la propiedad(), lo cual es un desperdicio de poco.
Mi programa específico está en C# pero parece una pregunta bastante genérica de "mejores prácticas" y estoy seguro de que debería saber la respuesta. Cualquier consejo recibido con gratitud.
+1 - Me ganaste. –
Tiene razón, debería estar estructurado sobre mis mensajes de error y tener un repositorio central para ellos donde puedo buscarlos para la versión "amigable para el usuario", etc. – Frans
El único truco que tengo con esta solución es que no lo haría use '0' como el valor de la primera enumeración decorada con' [Flag] '... – IAbstract