우리는 서비스를 계층화 된 디자인으로 리팩토링 (및 재 코스 재 설계)하고 있습니다. 우리는 서비스 운영 계층 (BLL), 네트워크 추상화 계층 -> (네트워크 프록시 관련), 데이터 추상화 계층을 가지고 있습니다. 그러나 예외 처리 전략에 대해 다소 당황 스럽습니다.계층화 된 아키텍처에서 예외 처리
- BLL에서 너무 많은 정보를 외부에 노출시키고 싶지 않습니다. 우리는 시도 캐치와 코드를 복잡하게하지 않으려는
- 는 catch 블록 을에 (등 이메일 전송, 기록 등)
- 우리는 혼란에 예외 처리 코드를 원하지 않는 스택 (BLL 다른 층에서 괜찮습니다)
간단한 예외 처리 프레임 워크를 디자인하는 데 사용할 수있는 코드 샘플이나 문헌 포인터를 게시 할 수 있습니까?
나는 내부 예외를 버블 링시키는 개념에 동의하지 않습니다.코드에서 호출 된 메서드가 조건을 나타내는 예외를 throw하면 호출자가 처리하려고 할 수 있습니다. 예외를 사용자 정의 중 하나로 랩핑하여 조건을 정의해야합니다. DatabaseWrapper 추상 클래스가 SqlServerWrapper 및 MySqlWrapper 구현을 가지고 있고 AcmeDatabase 클래스의 AcmeDatabaseWrapepr을 작성한 경우 AcmeDatabasseWrapper가 AcmeDatabaseException의 파생물을 허용하도록 결정하면 호출자가 예외를 유용하게 처리하지 않도록 결정합니다. – supercat
특정 상황을 처리해야하는지 여부를 결정하는 래퍼가 아닌 호출자 여야하므로 AcmeDatabaseWrapper 클래스는 AcmeDatabase에 의해 throw 된 모든 예외를 catch하고 DatabaseWrapperException 파생물로 감싸려고합니다 (예 : DatabaseWrapperTableNotFoundException, DatabaseWrapperInvalidQueryException, DatabaseWrapperSystemOnFireException). 등. – supercat
@supercat 예외는 특정 형태의 통신입니다. 코드를 사용하는 클라이언트를 제어 할 수 없을 때만 의미가 있습니다. 보통의 비즈니스 라인 어플리케이션에서 레이어의 수와 상관없이 일반적으로이 컨트롤을 사용합니다. 나는 프레임 워크 또는 그와 유사한 것을 만드는 것에 대해 말하는 것이 아닙니다. –