그래서 나는 많은 책임이있는이 SomeClass
을 리팩토링하려고했습니다. 위의 메소드는이 클래스를 트리밍하기에 좋은 장소처럼 보였으므로 IO 전용 클래스에 넣고 (필요할 때 조롱을 쉽게 허용하는) 생각했습니다.일부 레거시 코드 리팩토링 문제
class SomeClass{
...
public void m() {
...
emptyDirectory(something);
...
}
private void emptyDirectory(File dir) {
File[] dirContent = dir.listFiles();
if (dirContent != null)
for (File f : dirContent) {
if (f.isDirectory())
emptyDirectory(f);
try {
if (!f.delete()) {
IOError problem = new IOError(symbolTable.getRefinement().getFileName(),
f.toString(), f.isDirectory());
problemManager.add(problem);
}
} catch (SecurityException e) {
IOError problem = new IOError(symbolTable.getRefinement().getFileName(),
f.toString(), f.isDirectory());
problemManager.add(problem);
}
}
}
}
}
문제는 우리의 시스템이 (가 오류를보고하지만 모든 작업을 계속해야한다 그냥 컴파일러의 하나처럼 작동 오류 로깅 메커니즘을 가지고 당신이 프로그램을 컴파일 할 때., 그것은하지 않습니다 처음 오류가 발생할 때 컴파일 프로세스를 중지하십시오.)
나는이 오류보고 일에 대해 내 IO 클래스를 알지 못하게하고 싶습니다. 그래서 제 생각은 IO 메서드에서 예외를 던져서 m()
오류 잡기와 나머지 오류 처리를하는 것이 었습니다. 문제는 IOException
과 SecurityException
둘 다 파일의 이름이 무엇인지 알려주지 않는다는 것입니다.
나는 내 자신의 예외를 만들 수 있지만, 내가 그런 간단한 것들에 대한 내 자신의 예외를 만들기 시작한다면, 나머지 코드에 대해서도 수백 가지 예외를 만들어야 할 것입니다!
리팩토링을 가능한 한 간단하게 유지하고 싶습니다.
리팩토링을 어떻게 처리 하시겠습니까?
_ _ 자바 _? 나 늙은 거 같아 . . . –