-1
votes

Quelle est la meilleure façon d'éliminer beaucoup de nombreuses conditions?

Nous persistons à un objet dans la base de données, mais avant qu'il y ait peu de conditions qui doivent être vérifiées, j'utilise si - d'autre pour effectuer ce qui est le meilleur moyen d'éliminer les déclarations si-sinon. Nous définissons également un objet de réponse qui une carte dans chaque relevé.

Aussi, à l'avenir, nous devons vérifier d'autres conditions avant de créer ou de mettre à jour. P>

Callable<Response> callableObj = () -> {
    if(isNew){
    if(checkCreatePermission()){
       if(checkDuplicate()) {
          return foundObejct();
       } else {
           persistNewObject();
       }
    } else {
        throw new Exception();
    }
} else {
    if(checkUpdatePermission()){
        udapteObject();
    } else {
        throw new Exception();
    }

}
};



7 commentaires

Quelle version de Java utilisez-vous?


J'utilise Java 8 ...


Êtes-vous sûr que vous devriez appeler CheckeCreatermission quand ISnew est faux? Si la même méthode est appelée deux fois, vous pouvez déplacer cette pièce.


Désolé, c'était une faute de frappe. C'est en fait la checkupdatepermission (). Édité la question


Le code manque des retours, il ne compilera pas comme ça


checkereatpermission () et checkupdatepermission () représente clairement certains chèques liés à la sécurité pouvant être extériorisés à l'aide d'AOP, similaire à ressort similaire à celui de la sécurité du ressort et de certaines annotations telles que @Peuthorize et @postfilter et similaire. Il est également douteux de vérifier si l'objet existe déjà dans une DB I.e. À mesure que la DB vous indiquera une sorte d'exception quand même. Cela évite une requête de recherche précédente. En bref, vous faites des choses qui devraient déjà avoir pris soin de la couche de service ci-dessous


@DisplayName commentaire sur les votes bas et fermer conduit souvent à des représailles. Il est donc découragé. Voir Pourquoi ne fournit pas de commentaires obligatoires sur les bowvotes et pourquoi les idées suggèrent-elles un tel abattage?


4 Réponses :


0
votes

Je suggérerais de le diviser dans quelques méthodes. Je ne sais pas si j'ai eu de quoi avez-vous besoin, mais cela pourrait être quelque chose comme xxx


0 commentaires

1
votes

Vous pouvez utiliser quelques retours / lancers précoces. Rend le code un peu plus lisible. XXX


0 commentaires

1
votes

meilleur moyen d'éliminer beaucoup de conditions ifs ...

Un moyen de mieux coder est d'inverser les conditions de si, puis de définir le code conditionnel dans leurs méthodes distinctes.

Le code ci-dessous est fonctionnellement équivalent au code que vous avez écrit. xxx


2 commentaires

Merci pour la réponse. J'aime cette approche c'est plus propre. Mais la chose est que j'utilise appelable et que le code est à l'intérieur appelable. Si je crée une méthode privée extérieure appelable, cela fonctionnera-t-il? Averions-nous avoir des problèmes de concurrence?


@ user95814: Cela dépendrait de la mise en œuvre de la méthode. Les problèmes de concurrence peuvent survenir si les méthodes privées modifient des variables de classe. Si la méthode ne fonctionne que avec des données locales, des problèmes de concurrence ne se produiraient pas. Dans tous les autres cas, la mise en œuvre effective devrait être examinée.



0
votes

Vous pouvez être inspiré du Modèle de conception COR . Dans le code ci-dessous, je suppose que pour exécuter un appelable vous appelez son appliquer () méthode: xxx

avec cette approche, c'est facile Pour voir les conditions menant à chacune des réponses.

p / s: Vous pouvez mettre en cache les appels sur checkCreatermission () , checkupdatepermission () , et checkduplicate () si nécessaire.


0 commentaires