2009-12-21 4 views
1

예를 들어 프리젠 테이션, 비즈니스 및 데이터 레이어가있는 다중 레이어 Winform 응용 프로그램이있는 경우 업무에만 사용할 수있는 논리 작업이있는 비즈니스 레이어 또는 데이터 레이어에서 오류가 발생합니다 오류를 기록하고 오류가 발생했음을 사용자에게 알리는 것입니다.다중 레이어 WinForm App에서의 오류 처리

나는 그렇게

try 
{ 
    DoSomethingThatMightGiveErrors(); 
} 
catch(Exception ex) 
{ 
    logger.log(ex.ToString()); 
    throw; 
} 

같은 시도의 catch 블록에서하여 비즈니스 방법 및 데이터 레이어를 넣어해야 아니면 그냥 프리젠 테이션 계층까지 오류 거품을하자 로깅을 처리하고 사용자에게 통보한다 그곳에?

답변

3

비즈니스 계층 수준에서 로깅을 넣은 다음 오류를 다시 발생시킵니다. 이 레이어가 앞으로 다른 프로젝트에서 사용되면 이미 로깅을 수행하고 있습니다. 예외를 다시 작성하면이 계층의 사용자가 오류를 친숙한 메시지로 변환 할 수 있습니다.

EDIT : 로깅의 종류에 따라 약간 달라집니다 : UI와 독립적 인 중앙 데이터베이스에 로깅하는 경우 로깅을 비즈니스 로직 계층에 넣으십시오. 로깅이 UI에만 해당되는 경우 (예 : 응용 프로그램의 디렉토리에 로그 파일을 작성하는 경우) UI에 기록하십시오.

0

요구 사항에 따라 다릅니다. 예를 들어 프리젠 테이션 계층까지 버블 링을 통해 나타나는 오류로 인해 사용자가 응용 프로그램을 사용하지 않겠습니까? 예상치 못한 상황에서 얼마나 자주 이러한 오류가 발생합니까?

이것은로드 된 질문이며 모든 응용 프로그램이 다릅니다. 가장 기본적인 것은 비즈니스/데이터 계층에서 try catch 절을 사용하여 오류가 발생할 수있는 특정 상황을 사용자에게 알려주는 것입니다. 예상 됨 (문서에이 기능이 있습니까?)

최종 사용자의 요구 사항 및 피드백을 확인하십시오. 오류가 프레젠테이션 계층에 표시되도록 허용하면 최악의 경우는 거부됩니다 오류가 발생하여 작업 할 수 있습니다.

희망이 있으시면 번 Tom.

2

처리되지 않은 (비즈니스와 관련이없는) 예외에 대해 이야기하는 경우 사용자를 잡아/로그/알릴 수있는 UI 레이어로 전파되도록하십시오.

+0

이것은 내가 말했을 것입니다. 하지만 게리의 대답은 좋은 것입니다. –

1

내가 선호하는 것은 비즈니스 계층에 배치하는 것입니다.

  1. 당신이 이제까지 프리젠 테이션 계층 (웹 양식에 즉 윈폼)의 성격을 변경하는 경우 로깅 코드를 복제 할 필요가 없습니다.
  2. 항상 비즈니스 클래스의 메서드 목록을 검사하고 로깅을 검사/조정할 수 있기 때문에 모든 로깅을 쉽게 찾고 유지 관리 할 수 ​​있습니다. 프리젠 테이션 계층에 로깅을 넣으면 로깅 호출이 모든 곳에서 분산됩니다. 단일 비즈니스 클래스는 많은 다른 프레젠테이션 클래스에서 로깅 호출을 가질 수 있습니다.
관련 문제