0
votes

Un moyen élégant de remplacer plusieurs déclarations pour lancer des exceptions

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. XXX

Comment puis-je reformater ce code afin d'être maintenu dans le avenir? Dans le futur de nouveaux chèques pourraient être effectués.


0 commentaires

4 Réponses :


4
votes

Vous pouvez définir une interface 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 xxx pré>

Vous pouvez évidemment ajouter des paramètres à vérifier code> méthode afin de fournir des données à valider ... p>

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>

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());
        }        
     }
   }
}


3 commentaires

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 de vérifier afin qu'ils lancent des exceptions? Si cela n'est pas possible, vous pouvez étendre la définition de la classe cochers avec un message d'erreur; Ensuite, dans votre méthode, enveloppez l'appel à checker.check () avec un bloc si bloc, par exemple: si (! Checker.check ()) {lancer Nouvelle validationException (Checker.Errormsg); } .


J'aime beaucoup les conseils d'Alberto Venturini: Je tiens à mettre à jour ma réponse afin d'y inclure!



0
votes

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 xxx

Vous ne réduirez pas complètement complètement. Mais au moins vous augmentez la lisibilité.


0 commentaires

0
votes

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 xxx

et mettez en œuvre différents comportements.


0 commentaires

0
votes

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 à: xxx

alors vous pouvez envelopper chaque condition dans un autre: < Pré> xxx

Vous serez sûr maintenant que vos données sont vérifiées et prêtes pour des travaux supplémentaires.

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 . Si vous voulez changer de condition, vous n'avez pas à le rechercher en code commun. Vous avez une classe séparée pour cela.


0 commentaires