IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

performance enter try ou test


Sujet :

Langage Java

  1. #1
    Membre du Club

    Inscrit en
    Avril 2005
    Messages
    246
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 246
    Points : 57
    Points
    57
    Par défaut performance enter try ou test
    Bonjour,

    J'ai 2 possibiités pour le chargement d'un objet de ma bdd:

    Soit faire un test si l'objet existe en base de données si oui -> je le charge sinon -> je le crée d'abord.

    Soit faire tout le temps le chargement de l'objet(sans test) et si il n'existe pas en base alors le créer dans un catch au niveau l'exception qui remonte

    Je souhaiterais avoir vos opinions sur la solution la plus performante, sachant que le cas ou l'objet n'existe pas est tout de même assez rare.

    Merci

  2. #2
    Membre émérite
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Points : 2 582
    Points
    2 582
    Par défaut
    Si le cas où l'objet n'existe pas peut être déduit du contexte métier, alors il faut que tu le trouves à partir de là. Il ne faut pas le trouver à partir de la lecture de la base, mais à partir de ce que tu as formalisé du niveau métier.

    Si tu ne peux pas le déduire, mais que ce cas, bien que rare, soit correct, alors il faut que tu fasses le test d'abord : tu es dans une situation normale, donc tu la traites par le flux try, pas par le flux catch.

    Si ce cas est prévisible mais qu'il s'agit, selon de ce que tu peux craindre des choses et toutes étant égales par ailleurs mais chacun fait squipeutavecsquila, bref c'est un bug , alors tu le traites par le catch.
    Mieux que Google, utilisez Sur Java spécialisé sur la plate-forme java !
    Pour réaliser vos applications Java dans le cadre de prestations, forfait, conseil, contactez-moi en message privé.

  3. #3
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    les catch sont censé servir aux cas d'exception. Si c'est un objet en base de donnée, un simple select suffit à faire la test. Si t'as un row tu le retourne, si t'en a pas, tu le crée. Il faut aps esayer à tout prix de lire un row qui n'existe pas et traiter le "pas d'objet" dans le JDBCException. D'abord, tu risque de catcher descas d'erreur comme si ils voulaient dire 'pas d'objet' alors que l'erreur est autre, ensuite ca rend le code moins lisible. Enfin, si pour une raison ou une autre ta méthoe métier qui se base sur le try catch est appelée dans un finally, tu va perdre l'exception d'origne. Exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    public User getCurrentuser(){
      try {
          return getUser(login);
      } catch (MetierObjetExistePasException e){
          return createUser(login);
      }
    }
     
    ....
    try {
        ....// méthode qui déclenche un NullPointerException par exemple
    } finally {
       // pour une raison ou un autre, on doit garantir que unTruc() sera appelé sur l'utilisateur courant
       getCurrentUser().setUnTruc(); // Si MetierObjetExistePasException
            // déclenché et traité dans getCurrentUser, NullPointerException
            // n'existe plus!
    }

  4. #4
    Membre averti
    Inscrit en
    Juin 2006
    Messages
    570
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 570
    Points : 340
    Points
    340
    Par défaut
    Enfin je dirais que tu ne sais jamais comment ton application va évoluer. Peut être que demain, un cas d'utilisation impliquera que 80% des objets créés ne sont pas dans la BD. Cela impliquera alors une très grande quantité de try catch ce qui va ralentir énormément ton application.

Discussions similaires

  1. Optimiser les performances try/catch ?
    Par KiLVaiDeN dans le forum Langage
    Réponses: 4
    Dernier message: 14/01/2014, 13h47
  2. Réponses: 1
    Dernier message: 17/06/2006, 09h08
  3. [9iR2] : Test de performance
    Par debutant_oracle dans le forum Oracle
    Réponses: 2
    Dernier message: 22/02/2006, 16h22
  4. Performance et tri
    Par lihe dans le forum Décisions SGBD
    Réponses: 5
    Dernier message: 26/10/2005, 12h33
  5. [Performances]Filtre et tri en relation avec DB
    Par stoukou dans le forum Général Java
    Réponses: 6
    Dernier message: 19/09/2005, 11h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo