2010-04-08 5 views
4

이것은 실제로 어떤 언어에도 적용되지 않지만 중요한 점은 Visual Studio 2008에서 VB.NET을 사용하고 있다는 것입니다.프로그래밍 개념 : 예외가 발생할 때 수행해야 할 작업은 무엇입니까?

Google에서이 주제와 관련하여 유용한 정보를 찾지 못했지만 예외가 던져지고 잡힐 때 일반적인 관행이 궁금해졌지만 던져진 이후로 응용 프로그램을 계속 작동시킬 수 없습니다.

예를 들어 파일을 찾을 수 없거나 파일이 손상된 것으로 의심되는 경우 FileLoader 클래스에서 발생하는 예외가 있습니다. 예외는 클래스 내에서만 발생하며 실제로 처리되지 않습니다. 오류가 감지되면 예외가 throw되고 기본적으로 throw 된 모든 함수가 종료됩니다.

그래서 개체를 만들거나 구성원 중 하나를 호출하려고하는 코드에서 Try ... Catch 문을 사용합니다. 그러나, 나는이 예외가 잡힐 때 무엇을해야하는지 궁금해했다. 내 응용 프로그램은 이러한 파일이 손상되지 않도록해야하며 그렇지 않은 경우 응용 프로그램이 거의 쓸모가 없습니다. 지금까지 사용자에게 오류를 말하고 다시 설치하는 메시지 상자가 나타납니다. 이러한 상황에서 내가 할 수있는 또 다른 조치는 무엇입니까?

+0

관련/중복 : http://stackoverflow.com/questions/242587/exception-handling-architecture –

+0

나는 당신이 옳은 일을하고 있다고 생각합니다! – jjujuma

+0

감사합니다. 제안 사항이 생길 때 질문을 보지 못했습니다. 여기에 좋은 답변이 많이 있습니다! – Dooms101

답변

3

이럴이 시스템에서 예외의 다음과 같은 유형이 있습니다

  1. 복구 예외 - 이러한 시스템이 예외가 발생할 수있는 경우입니다,하지만 다음 상태로 기본적으로 할 수있는 그 수와 계속 작업 &은 사용자가 "계속", "다시 시도"또는 "취소"를 선택하여 기본 옵션으로 계속할 수 있다는 메시지를 사용자에게 표시합니다.

  2. 복구 할 수없는 예외 - 시스템을 계속할 방법이 없거나 기본 옵션이있는 경우입니다. 이 경우 사용자 개입이 필요합니다. 그래서 시스템이 나는 중 "취소"당신이 경우에 속하는 예외의 유형에 따라 작동

을 "다시 시도"하거나 옵션을해야할 일들의 적절한지도와 사용자에게 메시지를 표시 이것이 유용 할 수 있기를 바랍니다.

0

귀하의 특별한 상황에서 그것이 유일한 방법입니다.

다른 상황에서는 ... 실제로 상황에 따라 다릅니다.

2

일반적인 예외는 가능한 예외를 처리하고 사용자가 할 수없는 예외를 전달하는 것입니다 (선택적 로깅 사용). 방금 해결할 수없는 문제에 부딪혔다면 다시 시도 할 필요가 없으며 올바른 응답이 중지됩니다.

2

귀하의 경우에는 사용자 친화적 인 메시지로 오류를 표시 한 다음 작업을 종료하는 것으로 생각합니다. 정확히 수행해야 할 작업입니다.

나는 예외를 복구 할 수있는 예외와 복구 할 수없는 예외의 두 범주로 그룹화하는 경향이 있습니다. 분명히 사용자가 없어도 예외가 발생하더라도 오류가 있다는 것을 알게되면 복구 할 수있는 최선의 선택입니다. 그러나 어떤 경우에는 애플리케이션이 앞으로 나아갈 수 없으며 현재 작업을 취소해야합니다.

당신의 웹 앱은 소리가 나지 않지만, 그렇다면 예상치 못한 오류가 발생했을 때 개발자에게 전자 메일을 보내 개발자가 적절하게 변경하는 것이 도움이되는 경우가 종종 있습니다.

많은 프레임 워크에는 Try Catch 블록에 모든 것을 포함하지 않고 모든 잡히지 않은 예외를 잡는 방법이 있습니다. 예를 들어, ASP.NET 3.5는 모든 예외를 포착하는 Global.asax라는 클래스를 사용합니다. 우리의 응용 프로그램은 웹 기반이므로이 클래스를 통해 전달되지 않을 것으로 예상되는 모든 오류를 허용하고 개발자에게 오류 전자 메일을 보내고 해당 오류 페이지를 사용자에게 표시 할 수 있습니다. 코드의 특정 블록에서 가능한 예외가 예상된다면 당연히 블록 주위에 Try-Catch를 넣을 수 있지만 다른 모든 경우에는 이것이 유용합니다.

1

이 '문제'에 대한 실제적인 답변은 없지만 도움이 될만한 의견이 있습니다.

  • 이 추상화을 위반하지 마십시오 - 코드는 객체에서 다루고 있지만, 아래의 SQL 데이터 저장소를 사용하는 계층에서 호출되는 경우는 SQL 예외를 못하게해야한다.

  • 정보를 잃지 마십시오. - 사람들은 예외를 찾아 무시하거나 "무언가가 잘못되었습니다"라는 메시지를 인쇄하기도합니다. 로그 나 화면에 충분한 세부 정보가 없으면 문제가 발생한시기와 위치를 파악할 수 없으며 디버깅하는 데 많은 시간을 할애 할 수 있습니다.

  • 예외 계층 구조 -이 모든 언어에 적용되지 않을 수도 있지만 계층 적 예외를 구성 할 수 있고 그 나무보다는 하나 하나를 잡을 수 있다면, 많은 코드가 매우 깨끗해진다.

귀하의 접근 방식이 괜찮습니다. 치명적인 오류가 발생했음을 알리고 실행을 중단합니다. Sunny의 우수한 답변에서 빌리려면 복구 할 수 없으므로 사용자 개입을 요청해야합니다. 개인적으로, 나는 경고를 선호하고 충돌이 아닌 재설치를 요구하는 대신 가능하다면 기본값이나 내부로 되돌릴 것입니다.

0

내가 개발 한 내부 도구로이 상황에 자주 빠져 든다. 나는 보통 당신이 가진 것과 똑같이 다룬다. 사용자에게 오류 메시지를 표시하고 다시 시도하거나 종료하도록합니다.

관련 문제