예외 처리가 교차 절단 문제입니까?


13

예외 처리 문제와 로그인 문제 사이의 차이는 교차 절단 문제라는 점을 많이 알지 못합니다. 어떻게 생각해? 메소드가 구현하는 핵심 로직에 인터리브되는 대신 자체적으로 별도로 처리해서는 안됩니까?

편집 : 내가 말하려는 것은 내 의견으로는 메소드 구현에 성공적인 실행 경로에 대한 논리 만 포함해야하며 예외는 다른 곳에서 처리해야한다는 것입니다. 이것은 확인되거나 확인되지 않은 예외에 관한 것이 아닙니다.

예를 들어, 언어는 다음과 같은 구문을 사용하여 완전히 검사 된 방식으로 예외를 처리 할 수 ​​있습니다.

class FileReader {

  public String readFile(String path) {
    // implement the reading logic, avoid exception handling
  }

}

handler FileReader {

   handle String readFile(String path) {
      when (IOException joe) {
        // somehow access the FileInputStram and close it
      }
   }

}

위의 개념 언어 에서 클래스 의 readFile이 예외를 발생시키지 않기 때문에 프로그램은 FileReader handler없이 컴파일 되지 않습니다. 따라서 handler 를 선언하면 컴파일러가 처리되고 프로그램이 컴파일되는지 확인할 수 있습니다.FileReader FileReader

이런 식으로 우리는 확인 및 확인되지 않은 예외 문제 (강건성 및 가독성)를 최대한 활용합니다.

답변:


14

어떤 경우에는 그렇습니다

당신이 기록하고 싶은 예외가있는 경우 (거의 항상 가정 할 것입니다) 그렇다면 예외는 교차 절단 문제와 관련이 있습니다.

대부분의 시간

그러나 소켓 리스너의 인스턴스를 가져 오십시오. 소켓 끝이 연결을 끊는 다른 쪽 끝으로 인해 예외를 throw하면 예상되는 동작이므로 응용 프로그램이 예외를 발생시킨 상황에 따라 작동해야합니다. 이것은 일반적인 측면이 다루어야 할 것이 아니므로 교차 절단 문제가되어서는 안됩니다.

교차 절단 문제 식별

동일한 코드를 반복해서 복제하는 경우 추상화해야합니다. 추상화가 여러 계층으로 승격되는 경우 교차 절단 문제가 될 수 있습니다. 그런 다음에 만 고려해야합니다.


4

로깅은 선택 사항입니다. 예외 처리는 아닙니다.

로깅은 매우 일반적이며 특정 논리에서 소스를 얻는 동안 일반 소비자에게 제공됩니다. 예외는 항상 논리에 따라 다르며 해당 논리에 대해 잘 알고있는 일부 코드는 오류를 처리해야합니다.

적어도 두 가지를 제한적으로 사용한다는 것은 두 가지 목표가 다른 방식으로 가장 잘 처리되고 동일한 디자인 우산 아래가 아니라는 것을 의미합니다.


1

예외 처리는 특정 유형의 예외에 대한 교차 문제로 간주됩니다. 즉각적인 호출 코드 만 올바르게 처리 할 수있는 로컬 예외가 있습니다. 쿼리를 실행하려고 할 때 데이터베이스 예외가있을 수 있습니다. 그러나 더 전역 적으로 처리 할 수 ​​있고 처리해야하는 예외도 있습니다. 보안 자격 증명 부족과 관련된 예외 일 수 있습니다 (사용자가 다시 로그인하도록 강제). 또는 최소한 특정 코드를 통해 예외가 발생하는 경우 글로벌 처리기가 필요합니다. 사용자에게 IT를 시작하거나 IT에 로그를 보내려면 어떻게해야하는지 설명하십시오. 이러한 유형의 전역 적으로 처리되는 예외의 경우 교차 문제입니다.


0

나는 이것이 누출 추상 문제와 관련이 있다고 생각합니다.

추상화 계층을 통해 전파 될 때 많은 예외를 포착하고 다시 생각해야합니다. 재 투사는 인터페이스의 일부로 이해 될 수 있도록 재 투사를하는 추상화에 적합한 새로운 형태로 예외를 던져야한다. 다시 말해서, 더 낮은 수준의 추상화의 예외는 현재 추상 형태로 변환되어 더 높은 수준의 추상화는 순전히 예외 처리를 위해 낮은 수준에 대해 알 필요가 없습니다.

그러나 "누설 추상화의 원리"가 문제입니다. 일부 예외는 다음 추상화 계층 내에서 의미가있는 형식으로 변환 될 수 없습니다.

네트워크 파일 시스템 관련 예외는 간단한 예입니다. 네트워크 장애는 "파일"추상화에 의미가있는 용어로 표현할 수 없으며, 해당되는 경우 추상화가 파일 처리 구현과 관련된 모든 세부 사항을 완전히 추상화하지는 않습니다.

따라서 네트워크 장애는 기본 네트워크 추상화에서 유출 될 수 있으므로 나머지 코드 내에서 교차 문제가되어야합니다.

그러나 이것은 예외가 아닙니다. 실제로 파일 추상화와 관련이없는 파일 API에 대한 모든 반환 값 오류 코드는 하드 디스크 나 네트워크 또는 다른 형식의 오류가 다른 형식으로 상세하게 설명하여 하드 디스크 오류와 네트워크 오류를 암시합니다. 이러한 실패가 어떻게보고되는지에 관계없이 교차 절단 문제 등이 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.