"... 정확히 실패한 것을 어떻게 알 수 있습니까?"
이 질문을하면 메서드에서 너무 많이 진행되고 있으며 리팩터링 할 시간이라는 의미 일 수 있습니다. 기능 1 많이하고있다
void Function1()
{
//Do something...
//If something fail
Throw New Exception("Fails because bla bla");
//Do something...
//If something fail
Throw New Exception("Fails because bla bla bla bla");
//If everything its ok, just continue without throwing anything
}
:
는 여기에 귀하의 이전 질문에서 복사 한 예입니다. 유지 관리 (및 테스트)를 쉽게하기 위해 논리 그룹을 개별 메소드로 추출 할 수 있으며, 각 메소드는 성공을 나타 내기 위해 bool
값을 리턴합니다.
bool SomethingOne()
{
var successful = true;
//Do something...
//If something fail
successful = false;
return successful;
}
bool SomethingTwo()
{
var successful = true;
//Do something...
//If something fail
successful = false;
return successful;
}
void Function1()
{
var isOneSuccessful = SomethingOne();
if (!isOneSuccessful)
{
// SomethingOne failed - do something
return;
}
var isTwoSuccessful = SomethingTwo();
if (!isTwoSuccessful)
{
// SomethingTwo failed - do something
return;
}
//If everything its ok, just continue without throwing anything
}
YMMV. 나는 "무언가 실패"가 비판적인 문제라고 가정하고 있습니다. 어쩌면 이것이 유효성 검사 루틴 일 수도 있고 "모든 필드를 확인하십시오"라는 메시지 만 표시 할 수도 있습니다.
사용자의 메서드를 사용하는 프로그래머가 특별히 인식하고 처리해야하는 것이거나 사용자가 더 알고 있어야하는 것이면 간단한 부울로 잘라낼 수 없습니다.
이전 게시물의 의견을 읽고 '프로그램 흐름을 제어하기 위해 예외를 사용하지 마십시오.'라는 조언을 따르십시오.' – MethodMan
@DJKRAZE 나는 이전의 qestion에서 그것을 이해하고 나는 똑같은 것을 요구하지 않는다. 이제 다른 (관련) 문제를 어떻게 해결해야하는지에 대한 질문을하고 있습니다. André Snede Hanse가 다른 질문에서 제안한 것과 같은 새로운 질문으로 그것을하고 있습니다. –
bool 대신 enum을 반환 할 수 있습니다. 더 많은 정보가 필요하다면 열거 형 대신 클래스 객체를 반환 할 수 있습니다. 그러한 클래스는 Exception 객체를 닮기 시작할 것 같다. 따라서 예외를 반환하는 것이 실제로 잘못된 것은 아닙니다. 무엇이 잘못되었는지는 발신자가 무시할 수있는 기회를 열어주는 것이지 결코 끝나지 않는 것입니다. 예외 처리가 느리다고 결코 걱정하지 않으셔도됩니다. 프로그램이 수행해야 할 일을하지 않으려면 50 마이크로 초가 걸리지 않아도 상관 없습니다. –