Non un anti-pattern di per sé, ma un pattern di codice che ti dice che devi refactoring.
Ed è abbastanza semplice, devi solo conoscere una regola empirica che sta scrivendo non più di un blocco try nello stesso metodo. Se sai bene scrivere insieme il codice correlato, di solito è solo copiare e incollare ogni blocco try con i suoi blocchi catch e incollarlo all'interno di un nuovo metodo, quindi sostituire il blocco originale con una chiamata a questo metodo.
Questa regola empirica si basa sul suggerimento di Robert C. Martin del suo libro "Clean Code":
se la parola chiave "provare" esiste in una funzione, dovrebbe essere la prima parola nella funzione e che non ci dovrebbe essere nulla dopo i blocchi catch / finally.
Un rapido esempio di "pseudo-java". Supponiamo di avere qualcosa del genere:
try {
FileInputStream is = new FileInputStream(PATH_ONE);
String configData = InputStreamUtils.readString(is);
return configData;
} catch (FileNotFoundException e) {
try {
FileInputStream is = new FileInputStream(PATH_TWO);
String configData = InputStreamUtils.readString(is);
return configData;
} catch (FileNotFoundException e) {
try {
FileInputStream is = new FileInputStream(PATH_THREE);
String configData = InputStreamUtils.readString(is);
return configData;
} catch (FileNotFoundException e) {
return null;
}
}
}
Quindi potremmo eseguire il refactoring di ogni tentativo di cattura e in questo caso ogni blocco try-catch prova la stessa cosa ma in posizioni diverse (quanto conveniente: D), dobbiamo solo copiare e incollare uno dei blocchi try-catch e crearne un metodo .
public String loadConfigFile(String path) {
try {
FileInputStream is = new FileInputStream(path);
String configData = InputStreamUtils.readString(is);
return configData;
} catch (FileNotFoundException e) {
return null;
}
}
Ora lo usiamo con lo stesso scopo di prima.
String[] paths = new String[] {PATH_ONE, PATH_TWO, PATH_THREE};
String configData;
for(String path : paths) {
configData = loadConfigFile(path);
if (configData != null) {
break;
}
}
Spero che aiuti :)