안티 패턴 그 자체는 아니지만 리팩토링해야한다는 코드 패턴입니다.
그리고 그것은 매우 쉽습니다. 같은 방법으로 try 블록을 쓰는 법칙을 알아야합니다. 관련 코드를 함께 작성하는 것이 좋다면 일반적으로 각 try 블록을 catch 블록으로 복사하여 붙여 넣은 다음 새 메서드 안에 붙여 넣은 다음 원래 블록을이 메서드에 대한 호출로 바꿉니다.
이 경험 법칙은 Robert C. Martin의 책 'Clean Code'에서 제안한 내용을 기반으로합니다.
키워드 'try'가 함수에 존재하면, 키워드는 함수의 첫 번째 단어 여야하며 catch / finally 블록 뒤에 아무 것도 없어야합니다.
"의사 자바"에 대한 간단한 예. 다음과 같은 것이 있다고 가정하십시오.
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;
}
}
}
그런 다음 각 try catch를 리팩터링 할 수 있으며이 경우 각 try-catch 블록은 동일한 작업을 시도하지만 다른 위치 (편리한 : D)에서 try-catch 블록 중 하나를 복사하여 붙여 넣기 만하면됩니다. .
public String loadConfigFile(String path) {
try {
FileInputStream is = new FileInputStream(path);
String configData = InputStreamUtils.readString(is);
return configData;
} catch (FileNotFoundException e) {
return null;
}
}
이제 우리는 이전과 같은 목적으로 이것을 사용합니다.
String[] paths = new String[] {PATH_ONE, PATH_TWO, PATH_THREE};
String configData;
for(String path : paths) {
configData = loadConfigFile(path);
if (configData != null) {
break;
}
}
나는 그것이 도움이되기를 바랍니다 :)