Mon application a un service dans lequel 3 méthodes effectuent une certaine validation et, selon le résultat renvoyé, une exception différente est lancée. Comment puis-je reformater ce code afin d'être maintenu dans le avenir? Dans le futur de nouveaux chèques pourraient être effectués. P> p>
4 Réponses :
Vous pouvez définir une interface Vous pouvez évidemment ajouter des paramètres à Mise à jour p> Si vous faites du point de contrôle sur la mise en œuvre de la vérification de la condition, vous pouvez passer à quelque chose comme ceci (voir @Alberto Venturini's Commenter): P> vérificateur code> fournir une méthode
vérifier code> élever l'exception quand c'est le cas. Votre code peut changer quelque chose comme
vérifier code> méthode afin de fournir des données à valider ... p>
public interface Checker {
boolean check();
String message();
}
public class YourClass {
private List<Checker> checkers; // initialize through (dependency inhecjetd?) constructor parameter or by simply enumerating checker in the constructor; I personally prefer the first way
public void yourMethod() {
for(Checkech checker : checkers) {
if(!checker.check()) {
throw new ValidationException(checker.message());
}
}
}
}
Thx pour le conseil. Mais mes méthodes de chèques ne jetent aucune exception, elles jettent si la condition n'est pas remplie (la condition renvoie false), donc j'ai 3 méthodes de contrôle différentes avec 3 messages d'erreur différents
@DataProcs Avez-vous un contrôle sur le code de vérificateur - c'est-à-dire pouvez-vous modifier la signature de vos méthodes code> de vérifier code> afin qu'ils lancent des exceptions? Si cela n'est pas possible, vous pouvez étendre la définition de la classe code> cochers code> avec un message d'erreur; Ensuite, dans votre méthode, enveloppez l'appel à checker.check () code> avec un bloc code> si code> bloc, par exemple:
si (! Checker.check ()) {lancer Nouvelle validationException (Checker.Errormsg); } code>.
J'aime beaucoup les conseils d'Alberto Venturini: Je tiens à mettre à jour ma réponse afin d'y inclure!
Je vois que vous avez 3 conditions différentes avec 3 messages différents. Ça vaut la peine d'utiliser Smth comme GUAVA Confonditions ou écrire le vôtre.
Votre code Va aimer p> Vous ne réduirez pas code> complètement code> complètement. Mais au moins vous augmentez la lisibilité. P> p>
Vous pouvez essayer d'utiliser le polymorphisme pour réduire si des déclarations et améliorer la maintenabilité.
Utilisez simplement une interface comme celle-ci p> et mettez en œuvre différents comportements. P> p>
Il y a un moyen proche de OOP. Remarque: je n'insiste pas à ce sujet, montrant une alternative.
Tout d'abord, vous pouvez créer une nouvelle classe pour chaque condition. Et en supposant que vous effectuez une vérification sur certaines données, il ressemblera à: p> alors vous pouvez envelopper chaque Vous serez sûr maintenant que vos données sont vérifiées et prêtes pour des travaux supplémentaires. P> Je pense qu'il est facile de maintenir. Si vous avez besoin de quelques nouveaux chèques, Ajoutez simplement quelques petites classes comme ci-dessus et enveloppez vos données dans une autre condition condition code> dans un autre: p> < Pré> xxx pré>
code>. Si vous voulez changer de condition, vous n'avez pas à le rechercher en code commun. Vous avez une classe séparée pour cela. p> p>