내 응용 프로그램에서 예외를 처리하는 방법을 결정하는 중입니다.
예외에 대한 내 문제가 1) 원격 서비스를 통해 데이터에 액세스하거나 2) JSON 객체를 역 직렬화하는 데서 오는 경우가 많습니다. 안타깝게도 이러한 작업 (네트워크 연결 차단, 제어 할 수없는 잘못된 JSON 개체)에 대한 성공을 보장 할 수 없습니다.
결과적으로 예외가 발생하면 함수 내에서 예외를 포착하고 FALSE를 호출자에게 반환합니다. 내 논리는 호출자가 정말로 걱정하는 것은 작업이 성공했는지 여부가 아니라 왜 성공하지 못한 것인지라는 것입니다.
다음은 일반적인 방법의 일부 샘플 코드 (JAVA)입니다.)
public boolean doSomething(Object p_somthingToDoOn)
{
boolean result = false;
try{
// if dirty object then clean
doactualStuffOnObject(p_jsonObject);
//assume success (no exception thrown)
result = true;
}
catch(Exception Ex)
{
//don't care about exceptions
Ex.printStackTrace();
}
return result;
}
이 접근 방식은 괜찮다고 생각하지만 예외를 관리하기위한 모범 사례가 무엇인지 알고 싶습니다 (실제로 호출 스택까지 예외를 버블 링해야합니까?).
주요 질문 요약 :
- 예외를 포착하고 버블 링하거나 공식적으로 시스템에 알리지 않는 것이 괜찮습니까 (로그 또는 사용자에게 알림을 통해)?
- 모든 것이 try / catch 블록을 필요로하지 않는 예외에 대한 모범 사례는 무엇입니까?
후속 조치 / 편집
모든 피드백에 감사 드리며 온라인에서 예외 관리에 대한 훌륭한 소스를 찾았습니다.
- 예외 처리를위한 모범 사례 | 오라일리 미디어
- .NET의 예외 처리 모범 사례
- 모범 사례 : 예외 관리 (이제 문서는 archive.org 사본을 가리킴)
- 예외 처리 안티 패턴
예외 관리는 상황에 따라 달라지는 것 중 하나 인 것 같습니다. 그러나 가장 중요한 것은 시스템 내에서 예외를 관리하는 방법에있어 일관성이 있어야한다는 것입니다.
또한 과도한 try / catch를 통해 코드 부패를 조심하거나 예외를 존중하지 않습니다 (예외는 시스템에 경고하는 것입니다. 다른 경고가 필요한 것은 무엇입니까?).
또한 이것은 m3rLinEz 의 예쁜 선택 주석입니다 .
나는 Anders Hejlsberg와 당신에게 동의하는 경향이 있습니다.
이 주석에서 예외를 처리 할 때 고려해야 할 몇 가지 질문이 있습니다.
- 이 예외가 던져지는 점은 무엇입니까?
- 그것을 처리하는 것이 어떻게 합리적입니까?
- 호출자가 예외에 대해 정말로 신경을 쓰나요? 아니면 호출이 성공했는지 만 신경 쓰나요?
- 호출자가 잠재적 인 예외를 관리하도록 강요하는 것이 적절합니까?
- 언어의 우상을 존중하고 있습니까?
- 부울과 같은 성공 플래그를 반환해야합니까? 부울 (또는 int)을 반환하는 것은 Java (Java에서는 예외를 처리 할 것임)보다 C 사고 방식에 가깝습니다.
- 언어와 관련된 오류 관리 구조를 따르십시오 :)!