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();
}
}
};
4 Réponses :
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
Vous pouvez utiliser quelques retours / lancers précoces. Rend le code un peu plus lisible.
meilleur moyen d'éliminer beaucoup de conditions ifs ... p>
Un moyen de mieux coder est d'inverser les conditions de si, puis de définir le code conditionnel dans leurs méthodes distinctes. p>
Le code ci-dessous est fonctionnellement équivalent au code que vous avez écrit. P>
xxx pré> blockQuote>
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.
Vous pouvez être inspiré du Modèle de conception COR . Dans le code ci-dessous, je suppose que pour exécuter un avec cette approche, c'est facile Pour voir les conditions menant à chacune des réponses. p> p / s: Vous pouvez mettre en cache les appels sur appelable code> vous appelez son appliquer () code> méthode: checkCreatermission () code>, checkupdatepermission () code>, et checkduplicate () code> si nécessaire. p> p>
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 () code> etcheckupdatepermission () code> 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 code> et@postfilter code> 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?