문제

내가 보는 방법을 해야 하는 두 가지 작업을 이행하는 계약입니다.

  1. 레코드 삽입 db
  2. 보내는 이메일 통지 포함된 메타데이터 기록

모두 처리와 통화하여 개별 DAO 방법에 대한 책임을 완료하는 작업입니다.

나도 트랩에서 예외를 제 DAO,나는 손잡이 및 게시 그들에 BO.첫 번째 호출이 DAO 을 삽입할 수 있습을 던져 든나 sql 예외가 있습니다.이메일 방법을 사용하 SmtpClient.보내는 던질 수 있는 회전의 예외가 있습니다.

그것은 강제로 아이 메서드를 호출하는 메일 기능을 반환하는 단 하나의 유형,예외 사용자 지정 중 하나를 통해 특성?

이것을 설명하기 위하여:

public void AddSupportTicket(SupportTicketDTO ticket)
{
    try
    {
        supportTicketDAO.Insert(ticket);
        email.SendNotification(ticket);
    }
    catch (ExceptionA exc) { ... } // both of the methods can throw exceptions that
    catch (ExceptionB exc) { ... } // can overlap.  I just care about returning       
    catch (ExceptionC exc) { ... } // a custom EmailException or DataException
}

I 할 수 있는 포장은 각 아이 메소드 호출에도 캐치고 사용자 지정 예외가 나는 원하지만 다른 수준의 시도는 갇혀 다른 시에서 잡을 AddSupportTicket,그리고 다음 중 하나에서 UI 을 리다이렉션한 지능형 오류가는 소리가 나지 않는 훌륭한다.

어떻게 효율적으로 던져 올바른 사용자 지정 예외?

도움이 되었습니까?

해결책

네,그것은 매우 가능합니다.체크아웃 엔터프라이즈 라이브러리 예외 처리 블록.의 많은 좋은 물건에 올리기,포장,로그인 예외에서는 레이어뿐만 아니라는 정책을 설정할 수 있도록 핸들에서 그것을 구성하고 싶은 경우.와 결합된 응용 프로그램 구획,그것의 강력한 조합.

다른 팁

WCF를 사용하는 경우 주어진 기능에서 어떤 종류의 예외를 던질 수 있는지 지정할 수 있으므로 서비스 인터페이스에서는 다음과 같은 것을 가질 수 있습니다.

[OperationContract]
[FaultContract(typeof(MemberAlreadyExistsException))]
void MemberInsert(Member mu);

속성에 대해 알지 못하지만 당신은 그냥 할 수 없습니다.

try{
...
} catch(Exception ex) {

  throw new MyException("Some biz msg", ex);
}

C#은 Java와 같은 기능을 제공하지 않습니다 throws 키워드, 그것이 당신이 말하는 것이라면. XML 문서 표준을 통해 내 코드가 내 던지는 예외를 문서화 할 수 있지만 계약 적으로 강제로 강제 할 수있는 방법은 없습니다.

최선의 방법은 적절한 문서화 및 모든 수준의 응용 프로그램에서 glib에서 glib에서 지능적인 예외 처리입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top