공개 SDK를 사용하면 예외가 발생하는 이유에 대한 정보를 제공하는 경향이 있습니다. 예를 들면 다음과 같습니다.
if (interfaceInstance == null)
{
string errMsg = string.Format(
"Construction of Action Argument: {0}, via the empty constructor worked, but type: {1} could not be cast to type {2}.",
ParameterInfo.Name,
ParameterInfo.ParameterType,
typeof(IParameter)
);
throw new InvalidOperationException(errMsg);
}
그러나 이것은 코드의 흐름을 혼란스럽게하는 경향이 있는데, 코드가하는 일보다는 오류 메시지에 많은 초점을 두는 경향이 있기 때문입니다.
동료가 다음과 같은 예외를 발생시키는 일부 예외를 리팩토링하기 시작했습니다.
if (interfaceInstance == null)
throw EmptyConstructor();
...
private Exception EmptyConstructor()
{
string errMsg = string.Format(
"Construction of Action Argument: {0}, via the empty constructor worked, but type: {1} could not be cast to type {2}.",
ParameterInfo.Name,
ParameterInfo.ParameterType,
typeof(IParameter)
);
return new InvalidOperationException(errMsg);
}
코드 로직을 이해하기 쉽게 만들지 만 오류 처리를위한 많은 추가 메소드가 추가됩니다.
"긴 예외 메시지 혼란 논리"문제를 피하는 다른 방법은 무엇입니까? 나는 주로 관용적 인 C # / .NET에 대해 묻고 있지만 다른 언어로 관리하는 방법도 도움이됩니다.
[편집하다]
각 접근법의 장단점을 갖는 것도 좋을 것입니다.
Exception.Data
캡처 된 호출 스택과 함께 "픽키 (picky)"예외 잡기, 호출 코드 잡기 및 자체 컨텍스트 추가 속성 의 조합을 사용하면 정보를보다 상세하게 전달할 수 있습니다. 마지막으로 System.Reflection.MethodBase
"예외 구성"방법으로 전달할 세부 정보를 제공 할 것으로 기대됩니다.
Exception.Data
. 원격 측정 캡처가 강조되어야합니다. 여기에서 리팩토링하는 것은 좋지만 문제가 없습니다.