Recentemente ho letto questa domanda che presenta, la freccia anti-pattern.
Ho qualcosa di simile nel codice che sto cercando di refactare tranne che si ramifica. Sembra un po 'come questo:
if(fooSuccess==true&&barSuccess!=true){
if(mooSuccess==true){
.....
}else if (mooSuccess!=true){
.....
}
}else if(fooSuccess!=true&&barSuccess==true){
if(mooSuccess==true){
.....
}else if (mooSuccess!=true){
if(cowSuccess==true){
.....
}else if (cowSuccess!=true){
.....
}
}
}
......
In breve sembra così
if
if
if
if
do something
endif
else if
if
if
do something
endif
endif
else if
if
if
do something
endif
endif
endif
Profilo preso in prestito da Coding Horror articolo sull'argomento
E il codice continua attraverso diverse permutazioni di vero e falso per varie bandiere. Questi flag sono impostati da qualche parte "sopra" nel codice altrove, sia in base all'input dell'utente sia in base al risultato di un metodo.
Come posso rendere questo tipo di codice più leggibile? La mia intenzione è che alla fine avrò un oggetto di tipo Bean che contiene tutte le scelte che il programmatore precedente ha cercato di catturare con questo anti-pattern ramificato. Ad esempio, se nella struttura del codice sopra ne abbiamo solo tre, ho un enum impostato all'interno di quel bean:
enum ProgramRouteEnum{
OPTION_ONE,OPTION_TWO,OPTION_THREE;
boolean choice;
void setChoice(boolean myChoice){
choice = myChoice;
}
boolean getChoice(){
return choice;
}
}
Questa è una cura accettabile? O ce n'è uno migliore?