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 :

refactoring de plusieurs if-else-if-else .


Sujet :

Langage Java

  1. #1
    Membre habitué

    Profil pro
    Inscrit en
    Avril 2004
    Messages
    421
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2004
    Messages : 421
    Points : 189
    Points
    189
    Par défaut refactoring de plusieurs if-else-if-else .
    Bonjour,
    j'essaie de refactoriser le code que voici mais j'ai un peu de mal.

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
     
    public FigNode getFigNodeFor(
    	    Object node, int x, int y,
    	    Map styleAttributes) {
            if (node == null) {
                throw new IllegalArgumentException(
                        "A model element must be supplied");
            }
            FigNode figNode = null;
            if (Model.getFacade().isAComment(node)) {
                figNode = new FigComment();
            } else if (Model.getFacade().isAStubState(node)) {
                return new FigStubState();
            } else if (Model.getFacade().isAAssociationClass(node)) {
                figNode = new FigClassAssociationClass(node, x, y, 10, 10);
            } else if (Model.getFacade().isAClass(node)) {
                figNode = new FigClass(node, x, y, 10, 10);
            } else if (Model.getFacade().isAInterface(node)) {
                figNode = new FigInterface();
            } else if (Model.getFacade().isAEnumeration(node)) {
                figNode = new FigEnumeration();
            } else if (Model.getFacade().isAStereotype(node)) {
                figNode = new FigStereotypeDeclaration();
            } else if (Model.getFacade().isADataType(node)) {
                figNode = new FigDataType();
            } else if (Model.getFacade().isAInstance(node)) {
                figNode = new FigInstance();
            } else if (Model.getFacade().isAModel(node)) {
                figNode = new FigModel(node, x, y);
            } else if (Model.getFacade().isASubsystem(node)) {
                figNode = new FigSubsystem(node, x, y);
            } else if (Model.getFacade().isAPackage(node)) {
                figNode = new FigPackage(node, x, y);
            } else if (Model.getFacade().isAAssociation(node)) {
                figNode = new FigNodeAssociation();
            } else if (Model.getFacade().isAActor(node)) {
                figNode = new FigActor();
            } else if (Model.getFacade().isAUseCase(node)) {
                figNode = new FigUseCase();
            } else if (Model.getFacade().isAPartition(node)) {
                figNode = new FigPartition();
            } else if (Model.getFacade().isACallState(node)) {
                figNode = new FigCallState();
            } else if (Model.getFacade().isAObjectFlowState(node)) {
                figNode = new FigObjectFlowState();
            } else if (Model.getFacade().isASubactivityState(node)) {
                figNode = new FigSubactivityState();
            } else if (Model.getFacade().isAClassifierRole(node)) {
                figNode = new FigClassifierRole();
            } else if (Model.getFacade().isAMessage(node)) {
                figNode = new FigMessage();
            } else if (Model.getFacade().isANode(node)) {
                figNode = new FigMNode();
            } else if (Model.getFacade().isANodeInstance(node)) {
                figNode = new FigMNodeInstance();
            } else if (Model.getFacade().isAComponent(node)) {
                figNode = new FigComponent();
            } else if (Model.getFacade().isAComponentInstance(node)) {
                figNode = new FigComponentInstance();
            } else if (Model.getFacade().isAObject(node)) {
                figNode = new FigObject();
            } else if (Model.getFacade().isAComment(node)) {
                figNode = new FigComment();
            } else if (Model.getFacade().isAActionState(node)) {
                figNode = new FigActionState();
            } else if (Model.getFacade().isAFinalState(node)) {
                figNode = new FigFinalState();
            } else if (Model.getFacade().isASubmachineState(node)) {
                figNode = new FigSubmachineState();
            } else if (Model.getFacade().isAConcurrentRegion(node)) {
                figNode = new FigConcurrentRegion();
            } else if (Model.getFacade().isASynchState(node)) {
                figNode = new FigSynchState();
            } else if (Model.getFacade().isACompositeState(node)) {
                figNode = new FigCompositeState();
            } else if (Model.getFacade().isAState(node)) {
                figNode = new FigSimpleState();
            } else if (Model.getFacade().isAPseudostate(node)) {
                Object pState = node;
                Object kind = Model.getFacade().getKind(pState);
                if (Model.getPseudostateKind().getInitial().equals(kind)) {
                    figNode = new FigInitialState();
                } else if (Model.getPseudostateKind().getChoice()
                        .equals(kind)) {
                    figNode = new FigBranchState();
                } else if (Model.getPseudostateKind().getJunction()
                        .equals(kind)) {
                    figNode = new FigJunctionState();
                } else if (Model.getPseudostateKind().getFork().equals(kind)) {
                    figNode = new FigForkState();
                } else if (Model.getPseudostateKind().getJoin().equals(kind)) {
                    figNode = new FigJoinState();
                } else if (Model.getPseudostateKind().getShallowHistory()
                        .equals(kind)) {
                    figNode = new FigShallowHistoryState();
                } else if (Model.getPseudostateKind().getDeepHistory()
                        .equals(kind)) {
                    figNode = new FigDeepHistoryState();
                }
            }
     
            if (figNode == null) {
                throw new IllegalArgumentException(
                        "Failed to construct a FigNode for " + node);
            }
            setStyleAttributes(figNode, styleAttributes);
     
            return figNode;
        }
    Comme on peut le voir il y a un nombre important de if else if d'affiller que j'aimerais factoriser en utilisant plus la POO que cette horreur.
    m'ais j'ai malheureusement du mal.


    qqn pourrais me guider?

    merci

    a++

  2. #2
    Membre éclairé Avatar de g_rare
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    608
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 608
    Points : 683
    Points
    683
    Par défaut
    Tu as toujours la solution technique du "switch...case" en Java (sur des valeurs entières). Sinon en ce qui concerne la conception, regarde du côté des Design Patterns de Comportement : dans ton cas Chaîne de responsabilités et/ou Etat.

  3. #3
    Membre habitué

    Profil pro
    Inscrit en
    Avril 2004
    Messages
    421
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2004
    Messages : 421
    Points : 189
    Points
    189
    Par défaut
    heu merci mais je comprend pas tout .

    pour le switch case, c'est juste un remplacement de code , ca ne change pas grand chose.

    pour le design je vois pas trop pour la chaine de responsabilité.

    en gros, tout les objets on une methode la meme et on appelle cette methode jusqu'a ce qu'on trouve la bonne (en trop tres gros)

    ici le probleme, c'est la creation d'un objet en fonction du type d'un parametre?

    merci

    a++

  4. #4
    Membre habitué

    Profil pro
    Inscrit en
    Avril 2004
    Messages
    421
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2004
    Messages : 421
    Points : 189
    Points
    189
    Par défaut
    non c'est bon, j'ai compris (surtout le state)

    merci pour tout

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème avec if .. else if.. else dans une fonction
    Par marwa21 dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 21/04/2011, 10h37
  2. Plusieur instruction dans le ELSE
    Par sdeuss dans le forum Débuter
    Réponses: 4
    Dernier message: 29/04/2009, 23h17
  3. Problème avec mon if, else if, else
    Par beegees dans le forum ASP
    Réponses: 5
    Dernier message: 16/05/2008, 22h32
  4. Les tests conditionnels - If - Else if - Else
    Par stomerfull dans le forum Langage
    Réponses: 6
    Dernier message: 08/05/2008, 12h12
  5. strucute if(){} else if(){} else
    Par debutantasp dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 13/03/2008, 12h36

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