No es un anti-patrón en sí mismo, sino un patrón de código que le dice que necesita refactorizar.
Y es bastante fácil, solo tienes que conocer una regla de oro que no escribe más que un bloque try en el mismo método. Si sabe bien escribir código relacionado juntos, por lo general, solo está copiando y pegando cada bloque de prueba con sus bloques de captura y pegándolo dentro de un nuevo método, y luego reemplace el bloque original con una llamada a este método.
Esta regla de oro se basa en la sugerencia de Robert C. Martin de su libro 'Clean Code':
si la palabra clave 'try' existe en una función, debería ser la primera
palabra en la función y que no debería haber nada después de la
captura / finalmente bloques.
Un ejemplo rápido sobre "pseudo-java". Supongamos que tenemos algo como esto:
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;
}
}
}
Luego podríamos refactorizar cada captura de prueba y, en este caso, cada bloque de prueba de captura intenta lo mismo, pero en diferentes ubicaciones (lo conveniente: D), solo tenemos que copiar y pegar uno de los bloques de captura de prueba y hacer una método de la misma.
public String loadConfigFile(String path) {
try {
FileInputStream is = new FileInputStream(path);
String configData = InputStreamUtils.readString(is);
return configData;
} catch (FileNotFoundException e) {
return null;
}
}
Ahora usamos esto con el mismo propósito que antes.
String[] paths = new String[] {PATH_ONE, PATH_TWO, PATH_THREE};
String configData;
for(String path : paths) {
configData = loadConfigFile(path);
if (configData != null) {
break;
}
}
Espero que ayude :)