2011-03-02 4 views
3

좋은 생각이고 커뮤니티를 쿼리하고 싶다면 확실하지 않습니다. Exception 인스턴스를 데이터 전송에만 사용하고 던지지 않는 것은 어떻습니까? 그것은 로깅이나보고 목적으로 어떤 종류의 컨테이너에 예외 정보를 전달해야하는 상황을위한 것입니다. 예외의 데이터 구조는 필자의 프로그램에서 전달해야하는 정보와 유사하기 때문에 필자는 그것을 고려하고있다.예외 클래스를 전송 메커니즘으로 만 사용 하시겠습니까?

예외 인스턴스는 예외적으로 발생시킬 필요가없는 예외에 대한 정보를 패키지화하는 편리한 방법입니다. 예를 들어 예외적 인 데이터는 웹 서비스 호출에 대한 응답으로 상태 정보 (예 : XML)로 반환됩니다. 나는 이것을 처리하기 위해 예외 처리 시스템과 그 자원을 호출 할 필요가 없다.

Exception 클래스는 시스템 네임 스페이스의 모든 수준에서 이해되므로 다른 어셈블리에서 참조하지 않거나 사용자 지정 클래스를 만들지 않고도 컨테이너로 사용할 수 있습니다. 또한 예외는 메서드의 반환 값과 같이 일반적인 개체로 처리 될 수 있으므로 throw 할 필요가 없습니다.

플러스 앱은 원하는 경우 던지기 시작하도록 선택할 수 있습니다.

답변

2

내가보기에는 이것이 코드 소비자를 혼란에 빠뜨릴 수있는 주요한 문제입니다.

그들은 Exception 개체가 만들어지고 전달되지만 전달되지는 않는 것을 봅니다. 이것은 그들의 기대를 혼란스럽게 할 것입니다.

Exception을 기반으로 자신 만의 클래스를 만들 수 있습니다. 그러나이 코드를 사용하면 나에게 조금 "clunky"한 것처럼 보입니다.

0

조금 혼란 스러울 지 모르지만 그렇지 않으면 문제가 발생하지 않습니다. 또 다른 해결책은 모든 프로젝트에서 사용할 수있는 공용 프레임 워크 DLL을 작성하여 공통 클래스를 작성하는 것입니다. 가능하면 Exception으로 캐스팅 할 수있는 메소드를 작성하십시오.

-1

던지기, 잡기 및 로깅에있어 무엇이 문제입니까?
이것이 작업 방법입니다.

일반적인 방법으로 예외를 throw하고 catch하는 경우 스택 추적을 유지합니다. 스택 추적을 사용하지 않고 코드에서 실수를 찾는 것이 엉덩이의 왕통입니다.

그리고 일반 Exception 클래스를 사용하거나, 파생 클래스를 사용하거나, 직접 만들지 않아야합니다. 시간이 좀 걸리지 만 코드 문제를 추적 할 때 비용이들 것입니다.

+0

내 경우에는 개념적으로 상위 수준의 정보를위한 데이터 컨테이너로 사용하기 때문에 실제 .NET 예외가 아니라 스택 추적이 없을 것입니다. 물론 높은 수준의 개념은 앱과 관련된 메시지와 소스를 가지고 있습니다. –

+0

이것이 ** 오류 ** 인 경우, 일부 추적 로그 메시지가 아니라 해당 메시지를 _ 생시키는 곳에 던져 야합니다. 오류가 '저수준'일 필요는 없습니다. 새 BusinessRuleFailedException을 throw하는 것과 관련해서는 잘못된 것이 없습니다 ("이것은 우주를 다시 시작한 고급 수준의 blablabla입니다."). 그리고이 사건을 다루는 것은 코드의 책임입니다. –

+0

나는 downvote에 대한 이유를 보지 못했다. –

관련 문제