¿Cuál sería el mejor patrón de diseño para este problema?
Tengo un Objeto A. El Objeto A puede ser registrado o eliminado de la base de datos dependiendo de la solicitud del usuario.
La validación de datos se realiza antes del registro o eliminación del objeto. Hay un conjunto de reglas para verificar antes de que el objeto pueda registrarse y otro conjunto de reglas para su eliminación. Algunas de estas reglas son comunes para ambas operaciones.
Hasta ahora, creo que el patrón de diseño de la Cadena de responsabilidad se ajusta más, pero tengo problemas para implementarlo.
design-patterns
melodui
fuente
fuente
Respuestas:
Normalmente usaré una clase de validador separada para validar cada caso de uso. Por ejemplo, antes de agregar el producto a la base de datos, usaré AddProductValidator para validar la regla de negocios, antes de eliminar el producto, usaré DeleteProductValidator para validar, etc. Las reglas de negocios comunes se pueden extraer a la clase de especificación (Patrón de especificación) y compartirlas entre las clases de validación
Para estructurar la clase de validador, sigo el enfoque aquí: http://lostechies.com/jimmybogard/2007/10/24/entity-validation-with-visitors-and-extension-methods/
Si usa .NET, creo que podría considerar una validación fluida ( https://github.com/JeremySkinner/FluentValidation ). Creo que es bastante bueno y muy cercano al artículo que mencioné anteriormente
fuente
Como se describe, probablemente implementaría un tipo de opción . De esa forma, podría devolver un "Ninguno" o un valor validado (quizás de manera perezosa), pero ese es un detalle de implementación y me lleva muy bien a la idea de usar un Decorador .
Por supuesto, si la interfaz se vuelve fea, usaría una fachada .
fuente