Modèle de conception pour la validation des données

23

Quel serait le meilleur modèle de conception pour ce problème:

J'ai un objet A. L'objet A peut être enregistré ou supprimé de la base de données en fonction de la demande de l'utilisateur.

La validation des données est effectuée avant l'enregistrement ou la suppression de l'objet. Il y a un ensemble de règles à vérifier avant de pouvoir enregistrer l'objet et un autre ensemble de règles à supprimer. Certaines de ces règles sont communes aux deux opérations.

Jusqu'à présent, je pense que le modèle de conception de la chaîne de responsabilité convient le mieux, mais j'ai du mal à le mettre en œuvre.

melodui
la source
6
Pourquoi pensez-vous que le modèle de conception de la chaîne de responsabilité est le mieux adapté?
Adam Zuckerman

Réponses:

17

Normalement, j'utilise une classe de validateur distincte pour valider chaque cas d'utilisation. Par exemple, avant d'ajouter un produit à la base de données, j'utiliserai AddProductValidator pour valider la règle métier, avant de supprimer le produit, j'utiliserai DeleteProductValidator pour valider, etc.

Pour structurer la classe de validateur, je suis l'approche ici: http://lostechies.com/jimmybogard/2007/10/24/entity-validation-with-visitors-and-extension-methods/

Si vous utilisez .NET, je pense que vous voudrez peut-être envisager la validation fluide ( https://github.com/JeremySkinner/FluentValidation ). Je pense que c'est assez cool et assez proche de l'article que j'ai mentionné ci-dessus

Phuong Nguyen
la source
1
nouvelle URL de Fluent Validation: github.com/JeremySkinner/FluentValidation
Brij
4

Comme décrit, j'implémenterais probablement un type d'option . De cette façon, je pourrais retourner un "Aucun" ou une valeur validée (peut-être paresseusement) mais c'est un détail d'implémentation et conduit bien à l'idée d'utiliser un décorateur .

Motif de décorateur

Bien sûr, si l'interface devient moche, j'utiliserais une façade .

Elliott Frisch
la source
Decorator fonctionnerait, mais je pense généralement au modèle Decorator comme quelque chose à utiliser lorsque vous souhaitez transformer la sortie en entrée pour une autre classe à utiliser. Dans ce cas, vous valideriez simplement. Je pense que la chaîne de responsabilité peut mieux fonctionner à mon humble avis.
Neil