문제

일부 친구들은 방금 앱 구현을 마치고 사용자 정의 예외를 사용합니다. 내 관심을 끌었던 것은 사용자 정의 예외가 제기되면 구현 한 예외베이스 클래스의 코드에서 예외를 기록했다는 것입니다. 그래서 제 질문은 이것이 좋은 디자인 접근법입니까?. 내 생각은 벌목 도우미가 더 유용하다는 것입니다.

 public class BaseCustomException: System.Exception
{

   public BaseCustomException()
   {
              TightlyCoupledClass.Log(this);
   }

}
도움이 되었습니까?

해결책

나는 customexception을 제외 할 때마다 로깅이 발생하도록 보장 할 수 있도록 이것을 제자리에 두는 것에 대한 그들의 생각을 이해합니다. 그러나 이것은 확실히 냄새 나는 코드입니다.

예외는 예외를 위해서만 사용해야하며 customexception을 발생시킬 수있는 코드를 실행하는 코드는 해당 예외로 무엇을 해야하는지, 로그를 기록할지 여부를 결정할 수 있어야합니다 ... 로깅은 구체적이어야하기 때문입니다. 시나리오가 발생한 시나리오까지.

부수적으로, 사용자 정의 예외는 ApplicationException에서 루트로 상속되어 예외가 비즈니스 라이브러리 또는 .NET Framework 자체에서 사용자 정의인지 알 수 있도록해야합니다.
-획득-방금 찾았습니다 이 게시물 나는 그것이 본질적으로 ApplicationException을 사용하여 쓸모없는 것을 알지 못했다는 것을 알지 못했다.

다른 팁

아니요, 이것은 끔찍한 접근 IMO입니다. 그 이유는 가정이 생성 된 모든 예외가 던져 질 것이기 때문입니다.

예외는 일반적으로 읽히기 때문에 특정 상황에 대해 하나의 예외가 생성되고 필요에 따라 다시 구현되는 구현이 있습니다 (CLR은 예외가 발생하면 구성이 없을 때 스택 트레이스를 설정합니다).

결론적으로는 일반적이지 않지만 생성 될 때 예외가 발생하지 않을 수 있으며,이를 기반으로 가정하지 않아야합니다.

나는 그렇게 생각하지 않습니다. 예외 (및 기타 데이터)를 로그에 기록하는 전역 예외 처리기를 설정했습니다. 그렇게하면 당신이 잡은 예외 만 쓰고 있습니다.

이 솔루션은 너무 단단히 결합되어 구성 불가능합니다. 더 강력한 예외 처리 프레임 워크를 사용하는 것이 좋습니다. 엔터프라이즈 라이브러리 예외 처리 애플리케이션 블록.

생성자 내에 로깅은 평범합니다. 작업을 시도한 코드는 예외가 포함될 수있는 의미있는 메시지를 구성하기 위해 어떻게해야합니까? 예외의 역할은 메시지를 기록하지 않고 문제를 나타내는 것입니다. 다른 코드는 특정 예외를 포착 할 수있는 모든 부품이 원하는 것을 수행 할 수 있도록이를 처리해야합니다. 이는 예외를 기록하는 것이거나 포함되지 않을 수 있습니다.

생성자 내부 로그의 경우 예외가 래핑되어 다시 잡히는 경우 예외는 두 번 기록됩니다.

catch ( CustomException exception ){
Logger.error( "Really useful message", exception );
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top