문제

어야 나는 항상 감싸 외부 리소스에서 호출을 시도-이 있을까요?(ie.전화 또는 데이터베이스 파일시스템)가 있는 최고의 연습하는 오류 처리를 위해 호출하면 외부 리소스?

도움이 되었습니까?

해결책

잡기 만 예외가 는 당신 할 수 있는 손잡이.그래서 예를 들어 사용하는 경우 외부 자원을 최상의 방법을 잡을 것입 예외는 당신이 알고 처리할 수 있습니다.의 경우에는 파일이 될 수 있습니다(IOException,SecurityException,etc.),의 경우에 데이터베이스를 제외할 수 있습 SqlException 또는 다른 사람입니다.

어떤 경우에, 을 잡을 수 없 예외는 당신 지 않을 처리, 그들에게 흐름을 상위 계층을 할 수 있습니다.는 경우 또는 당신이 어떤 이유로 잡아 예외 그러나 처리하지 마십시오,그들을 다시 발생시킬 사용하여 그들을 그냥 던; (는 것입니다 만들기를 다시 발생시키 IL op 반대로 생각하).

의 경우에는 사용하는 리소스가 무엇인지 알 수 없을 형식의 예외 수도,당신은 종류의 강제로 잡아 일반적인 예외는 유형입니다.이 경우실 것을 사용하는 말소에서 다른 응용 프로그램을 도메인에 있는지 확인하십시오.(가능한 경우),또는 예외는 거품까지 최고 수준(ex UI)을 표시할 수도 있고 또는 기록됩니다.

다른 팁

캐치 블록을 가지고 있어야 할 세 가지 이유가 있다고 생각합니다.

  • 예외를 처리하고 복구 할 수 있습니다 ( "낮은 레벨"코드에서)
  • 예외를 다시 쓸어 내고 싶습니다 (다시 "낮은 레벨"코드에서)
  • 당신은 스택의 상단에 있고, 당신은 작동 자체를 복구 할 수는 없지만, 전체 앱이 내려 가기를 원하지 않습니다.

당신이 이것을 고수한다면, 당신은 비교하여 캐치 블록이 거의 없어야합니다. try/finally 블록 - 그리고 그것들 try/finally 블록은 거의 항상 전화입니다 Dispose, 따라서 가장 잘 쓰여졌습니다 using 진술.

결론 : finally 자유 자원을 차단하지만 catch 블록은 일반적으로 더 드물어야합니다.

Eric Lippert는 이것에 대한 좋은 블로그를 가지고 있습니다. 여기.

유용한 일을 할 수 없다면 예외를 포착하는 점이 없습니다 ( "vexing"(블로그 참조)). 그리고 대부분의 경우 당신은 단순히 단순히 할 수 없습니다. 따라서 거품을 내십시오 (UI는 분명히 청소하고 무언가를 표시해야합니다).

그러나 자원 관리를 처리하기 위해 "시도/마침내"가있을 수 있습니다. 또는 더 깨끗하고, "사용"블록이 동일하게 수행합니다.

절대적인 대답은 완전히 조건부라고 생각합니다 (환경에 대한 통제력, 성능과 일관성과 다른 많은 것들 사이의 예상 균형은 무엇입니까? 성능.

항상 달성하고자하는 것에 달려 있습니다. 응답하지 않는 서버는 일상적인 일을 모두 막을만큼 충분히 심각 할 수 있으며, 예외는 발신자에게 던져야합니다.

다른 경우에는 DB 업데이트에 실패했는지 여부는 신경 쓰지 않습니다. 그런 다음 예외를 소비해도 괜찮습니다.

분명히, 당신은 최종 사용자에게 스택 추적을 보여주고 싶지 않으므로 어딘가에 잡아야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top