2011-04-24 5 views
2

우리는 서비스를 계층화 된 디자인으로 리팩토링 (및 재 코스 재 설계)하고 있습니다. 우리는 서비스 운영 계층 (BLL), 네트워크 추상화 계층 -> (네트워크 프록시 관련), 데이터 추상화 계층을 가지고 있습니다. 그러나 예외 처리 전략에 대해 다소 당황 스럽습니다.계층화 된 아키텍처에서 예외 처리

  1. BLL에서 너무 많은 정보를 외부에 노출시키고 싶지 않습니다. 우리는 시도 캐치와 코드를 복잡하게하지 않으려는
  2. 는 catch 블록
  3. 을에 (등 이메일 전송, 기록 등)
  4. 우리는 혼란에 예외 처리 코드를 원하지 않는 스택 (BLL 다른 층에서 괜찮습니다)

간단한 예외 처리 프레임 워크를 디자인하는 데 사용할 수있는 코드 샘플이나 문헌 포인터를 게시 할 수 있습니까?

답변

3

우리는 BLL에서 너무 많은 정보를 외부에 노출시키고 싶지 않습니다.
그것은 노출 무엇을 정의하는 BLL 자체의

(다른 레이어에서 BLL에 괜찮습니다). 보이는 것을 보여 주어야합니다. 우리는 시도 캐치와 코드를 복잡하게하고 싶지 않아

그런 다음

하지 스택. 예외는 예외입니다. 그들을 사용하여 흐름을 제어하지 마십시오. 그들을 폭파 시키자.

우리는 혼란에 예외 처리 코드를 원하지 않는 당신의 논리가 (이 그것을 안) 예외 처리에 의존하지 않는 경우

catch 블록에서 (로깅, 이메일 등 같은) 귀하 code guards itself (이 중 하나가 중요합니다. 귀하의 응용 프로그램은 이어야합니다. 항상이 무효 상태로 처리되어야합니다. 그렇지 않은 경우 무엇이 원인인지 이해하기 어렵습니다.) 그러면 덤프하는 오류 처리기가 1 개만있는 전체 응용 프로그램을 래핑하는 것으로 충분합니다. 필요한 경우 스택 추적.

예. - .net에서, 당신은 appdomain unhandled exception event에 가입 할 수 있습니다.

저는 개인적으로 웹 응용 프로그램에 ELMAH을 사용합니다. app.config의 몇 줄에 sqlite에 저장된 멋진 오류 로그가 있으며 웹 응용 프로그램 자체에서 쉽게 액세스 할 수 있습니다. 그것은 내가 가진 모든 오류 처리에 관한 것입니다.

+0

나는 내부 예외를 버블 링시키는 개념에 동의하지 않습니다.코드에서 호출 된 메서드가 조건을 나타내는 예외를 throw하면 호출자가 처리하려고 할 수 있습니다. 예외를 사용자 정의 중 하나로 랩핑하여 조건을 정의해야합니다. DatabaseWrapper 추상 클래스가 SqlServerWrapper 및 MySqlWrapper 구현을 가지고 있고 AcmeDatabase 클래스의 AcmeDatabaseWrapepr을 작성한 경우 AcmeDatabasseWrapper가 AcmeDatabaseException의 파생물을 허용하도록 결정하면 호출자가 예외를 유용하게 처리하지 않도록 결정합니다. – supercat

+0

특정 상황을 처리해야하는지 여부를 결정하는 래퍼가 아닌 호출자 여야하므로 AcmeDatabaseWrapper 클래스는 AcmeDatabase에 의해 throw 된 모든 예외를 catch하고 DatabaseWrapperException 파생물로 감싸려고합니다 (예 : DatabaseWrapperTableNotFoundException, DatabaseWrapperInvalidQueryException, DatabaseWrapperSystemOnFireException). 등. – supercat

+0

@supercat 예외는 특정 형태의 통신입니다. 코드를 사용하는 클라이언트를 제어 할 수 없을 때만 의미가 있습니다. 보통의 비즈니스 라인 어플리케이션에서 레이어의 수와 상관없이 일반적으로이 컨트롤을 사용합니다. 나는 프레임 워크 또는 그와 유사한 것을 만드는 것에 대해 말하는 것이 아닙니다. –

1

예외 처리는 원하는만큼 복잡 할 수 있지만 좋은 방법은 일부 전역 정의를 사용하는 것입니다. 예를 들어 Unity, Windsor Castle, Spring.NET과 같은 대부분의 IoC 컨테이너의 일부인 AOP 프레임 워크를 사용하여 빌드 할 수있는 측면이 있습니다. AOP 프레임 워크의 별도 카테고리는 런타임시 컴파일 시간에 관한 측면을 추가하는 PostSharp입니다.

또한 Enterprise Library 5.0 및 해당 Exception handling application block에서 정책 기반 예외 처리를 수행 할 수 있습니다.