문제

나는 다음과 같은 API:

public interface MyApi {

   /**
    * Performs some stuff.
    * @throws MyException if condition C1
    */
   public void method() throws MyException;
}

나는 지금 실행하고 다음에서 수정 나의 API 를 구현

public class MyApiImpl {

   public void method() throws MyException {
     if (C1) {
       throw new MyException("c1 message");
     }
     ...
   }
}

대체:

public class MyApiImpl {

   public void method() throws MyException {
     if (C1) {
        throw new MyException("c1 message");
     } else if (c2) {
        throw new MyException("c2 message");
     }
     ...
   }
}

당신은 이것을 고려 API 파손?

클라이언트 코드는 아직도 컴파일러 방식의 계약에 의해 정의된 javadoc API 가 더 이상 존중하기 때문 MyExcepiton 가에 의해 발생한"새로운"상태입니다.

는 경우에만 내 API jar 파일 업데이트되고,클라이언트 응용 프로그램은 여전히 작동하지 않지만 방식에 따라 고객을 잡아라 예외의 응용 프로그램 동작을 변경할 수 있습니다.

무엇이 당신의 관점에서는?

도움이 되었습니까?

해결책

그렇습니다,당신은 당신이 계약을 파기의 인터페이스로 던지는 예외 경우 C1 가 발생하지 않습니다.

엄지 손가락의 규칙으로,이 vaguer 인터페이스 계약,쉽지 않을 것이다.)의 경우 인터페이스지에 정의된 약관의 명시적 C1 지만,일반적인 이용 약관,을 제공하는 많은 유연성이 향상됩니다.

다른 팁

나의 관점에는 변경하지 않아야 합 계약에 의해 정의된 API 를 설명서를 참조하십시오.필요할 경우 새로운 행동을 해야 하나.) 새로 만드는 방법이라고 할 수 있는 클라이언트가 이러한 경향을 반영하여 이 새로운 행동이나 b.) 토론으로 클라이언트는 필요한 변경과 그들의 알고 있습니다.

이 두 가지 방법으로 갈 수 있습,그것은 당신과 당신의 클라이언트 사이의 무엇으로의 접근 방식이 될 것입니다.

이에 따라 크게 달라집 c2 입니다.그것은 논리적 범위에서 기존의 계약?그렇다면,당신은 만족함으로써 이용계약을 던지고 MyException.그렇지 않으면 아마도 당신은 버려야 새로운 형식의 예외는 아니다.

나는 나는 대한의 확인 예외가 있습니다.궁극적으로 하는 사람을 강제로 다루는 예외 없는 반드시 자신의 코드를 더하거나 안전하(수 있습니다 사실에서 반대의 효과 그들이 할 수 있는 엉성하게 삼키는 가짜 예외).

I'd say"no",아무 API 파손하지 않는 한,MyException 은 RuntimeException.그런 다음 그것입니다.

어쨌든,나는 하위 클래스 MyException 조건에 대한 C2

조 C1 과 C2 해야한다"exceptional"이럴 내가 만들지 않는 습관을 던지는 예외

그것은 파손됩니다.는지 여부를 API 를 적용되는 언어에 의해 생성 또는 단순히 문서화하는 관련이 없습니다.

이 여부 파손의 원인에 대한 문제가 클라이언트 코드는 다른 질문입니다.수 있다는 고정이 결함 및 덮개 케이스 C2 에서 이 방법을 fix it.에서는 존중 클라이언트 코드 개발자가 될 수 있습 행복한 당신이 변화를 만들(가정하면 그들은 현재 작동하지 않습 주위에 결함을 같은 방법으로는 휴식의 얼굴에서 변화를!)

나는 생각한 문제가 여기에는 일부의 인터페이스 구현은 특정 조건입니다.는 경우"C1"상태이었의 일부만을 구현할 수 있는 다음 단순히 새로운 구현 발생하는 예외에서"C1"또는"C2"파괴하지 않고 인터페이스입니다.

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