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

Développement Windows Discussion :

Propagation d'une exception entre les différentes couches


Sujet :

Développement Windows

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Septembre 2002
    Messages
    230
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 230
    Par défaut Propagation d'une exception entre les différentes couches
    Bonjour,

    Dans la couche métier, j'ai ce bout de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    public static class TEST
    {
       public static void Load(string filename)
       try
       {
          ...
       }
       catch(Exception e)
       {
           Log.writetofile(e);
       }
    }
    Dans la couche IHM, je fais appel à la méthode Load.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    try
    {
       TEST.Load(@"c:\test.txt");
    }
    catch(Exception e)
    {
        Log.writetofile(e);
    }
    Si une exception est déclenchée dans la méthode Load je voudrai l'intercepter dans la couche IHM pour afficher un message à l'utilisateur. Comment faire ?

  2. #2
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Citation Envoyé par Axiome Voir le message
    Si une exception est déclenchée dans la méthode Load je voudrai l'intercepter dans la couche IHM pour afficher un message à l'utilisateur. Comment faire ?
    Ne pas l'intecepter dans les couches basses, ou, mieux, refaire un throw de l'exception derrière.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public static class TEST
    {
       public static void Load(string filename)
       try
       {
          ...
       }
       catch(Exception e)
       {
           Log.writetofile(e);
           throw new MyException(e);
       }
    }
    Avec MyException héritant de Exception, bien sur.

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Tu peux aussi relancer la même exception sans en créer une nouvelle (à condition que cette exception ait un sens en dehors de ta couche métier bien sûr) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public static class TEST
    {
       public static void Load(string filename)
       try
       {
          ...
       }
       catch(Exception e)
       {
           Log.writetofile(e);
           throw;
       }
    }

  4. #4
    Membre émérite
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2007
    Messages
    693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 693
    Par défaut
    Citation Envoyé par tomlev Voir le message
    Tu peux aussi relancer la même exception sans en créer une nouvelle (à condition que cette exception ait un sens en dehors de ta couche métier bien sûr) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public static class TEST
    {
       public static void Load(string filename)
       try
       {
          ...
       }
       catch(Exception e)
       {
           Log.writetofile(e);
           throw;
       }
    }
    J'ajouterai (si biensur l'exception a un sens telle quelle dans les couches supérieures) que les deux codes suivants ne donnent pas le même résultat:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
       try
       {
          ...
       }
       catch(Exception e)
       {
           Log.writetofile(e);
           throw;
       }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
       try
       {
          ...
       }
       catch(Exception e)
       {
           Log.writetofile(e);
           throw e; // ou encore throw new Exception(e);
       }
    Le fait de reprendre l'exception dans le throw provoque le "cassage" de la pile.
    En gros le throw simple transmet directement l'exception en cours (donc avec sa pile) et le throw e (ou throw new Exception(e)) lève une nouvelle exception et sa pile commence à partir du throw.

  5. #5
    Membre éclairé
    Inscrit en
    Septembre 2002
    Messages
    230
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 230
    Par défaut
    Merci à tous pour ces réponses.

    Si dans la couche IHM je lance la méthode TEST.Load dans un nouveau thread l'exception ne monte pas à la cocuhe IHM ?!

    Comment faire ?

  6. #6
    Membre émérite
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2007
    Messages
    693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 693
    Par défaut
    Alors,

    Si tu travailles avec les BackgrounfWorker, l'eventargs a une propriété error qui transporte l'erreur.

    Si tu travailles avec des Thread, là j'ai moins l'habitude mais il doit être possible de faire transiter (un peu sur le modèle du BackgroundWorker) l'erreur via le AsyncResult ! Les pros, il faut confirmer ce point.

Discussions similaires

  1. Réponses: 2
    Dernier message: 19/11/2013, 14h38
  2. Lien entre les différentes couches sous Spring
    Par Evenae dans le forum Spring
    Réponses: 1
    Dernier message: 10/02/2012, 14h22
  3. Réponses: 0
    Dernier message: 17/04/2009, 12h03
  4. les différentes couches d'une appli
    Par sicilianadev dans le forum C#
    Réponses: 1
    Dernier message: 06/02/2009, 13h57

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