Eh bien, ça fait longtemps que cette question a été postée mais j'aimerais donner un point de vue différent sur ce sujet.En utilisant l'exemple spécifique que vous avez posté, à mon humble avis vous devriez faire la validation, mais d'une manière différente.
La clé de la validation de l'archivage réside dans la question elle-même. Pensez-y: vous avez affaire à des noms, pas à des chaînes. Une chaîne est un nom lorsqu'elle n'est pas nulle. Nous pouvons également penser à des caractéristiques supplémentaires qui font d'une chaîne un nom: est ne peut pas être vide ni contenir d'espaces. Supposons que vous ayez besoin d'ajouter ces règles de validation: si vous respectez votre approche, vous finirez par encombrer votre setter comme l'a dit @SingleShot.
En outre, que feriez-vous si plus d'un objet de domaine a un setter setName? Même si vous utilisez des classes auxiliaires comme le fait @dave, le code sera toujours dupliqué: les appels aux instances auxiliaires. Maintenant, réfléchissez un instant: et si tous les arguments que vous pouviez jamais recevoir dans la méthode setName étaient valides? Aucune validation ne serait nécessaire à coup sûr. Je peux sembler trop optimiste, mais cela peut être fait. Rappelez-vous que vous avez affaire à des noms, alors pourquoi ne pas modéliser le concept d'un nom? Voici une vanille, la mise en œuvre factice pour montrer l'idée:
public class Name
public static Name From(String value) {
if (string.IsNullOrEmpty(value)) throw new ...
if (value.contains(' ')) throw new ...
return new Name(value);
}
private Name(string value) {
this.value = value;
}
// other Name stuff goes here...
}
Parce que la validation se produit au moment de la création, vous ne pouvez obtenir des instances de noms valides. Il n'y a aucun moyen de créer une instance Name à partir d'une chaîne "invalide". Non seulement le code de validation a été centralisé, mais des exceptions sont également lancées dans un contexte qui a un sens (la création d'une instance Name).
Vous pouvez lire sur les grands principes de conception dans "Design Principles Behind Patagonia" de Hernan Wilkinson (l'exemple de nom en est tiré). Soyez sûr de vérifier le ESUG 2010 Video et le presentation slides
Enfin, je pense que vous pourriez trouver l'article de Jim Shore "Fail Fast" intéressant.
Il semble que votre personne ne reçoive pas de couverture de test unitaire pour ces branches de lancer de contrôle. Vous devriez leur dire d'arrêter d'être paresseux, et de couvrir ceux qui sont dans les tests, comme il se doit. –
Tests unitaires? Nous n'avons pas besoin de tests unitaires ... (je sais, je sais, mais je ne peux pas tout changer ...) –