문제

사전 및 사후 조건이있는 방법이 있다고 가정 해 봅시다. 달성되지 않은 각 사전 조건에 대한 예외 클래스를 작성해도 괜찮습니까? 예를 들어 : pre1을 달성하지 않으면 notpre1Exception 인스턴스를 던지는 것을 의미합니다.

도움이 되었습니까?

해결책

예 그리고 아니오.

예 - 전제 조건을 위반하는 것은 확실히 예외를 던질 수있는 적절한 시간입니다. 보다 구체적인 예외를 던지면 특정 예외를 더 간단하게 잡을 수 있습니다.

아니요 - 프로그램/API의 모든 전제 조건에 대한 새로운 예외 클래스를 선언하는 것은 과잉으로 보입니다. 이로 인해 결국 수백 또는 수천 개의 예외가 생길 수 있습니다. 이것은 정신적으로나 계산적으로 폐기물처럼 보입니다.

전제 조건 위반에 대한 예외를 던지는 것이 좋습니다. 그러나 각 전제 조건에 대한 새로운 예외를 정의하는 것이 좋습니다. 대신, 나는 특정한 것을 다루는 더 넓은 클래스의 예외를 만드는 것이 좋습니다. 유형 특정 전제 조건 위반보다는 전제 조건 위반. (또한 잘 맞는 곳에 기존 예외를 사용하는 것이 좋습니다.)

다른 팁

PreconditionPailedException (String Precondition)을 정의하고 싶지 않은 이유는 무엇입니까? 실패한 전제 조건에 대해 다른 예외 유형을 던지는 것은 과잉입니다.

실패한 전제 조건은 AsserTexception 또는 비슷한 것을 던져야합니다. 방법을 호출하기 전에 전제 조건이 유지되어야합니다. 발신자 가이 점검을 수행하지 않으면 프로그램의 버그 또는 메소드 (API)의 잘못된 사용입니다.

사전 조건을 달성하지 못한 경우에만 드물게 특별한 발생.

나에게 유용한 예외를 사용하는 것 같습니다. 단일 '전제 조건 실패'예외를 가질 수 있지만 예외 메시지에 실패한 전제 조건을 넣을 수는 있지만 일반적인 '전제 조건 실패'보다 더 세밀한 로깅 및 디버깅을 허용합니다.

사용 및 처리 계획을 세우는 한 모든 예외에 대해 다른 예외를 만들어도 괜찮다고 생각합니다.

오류/예외 처리가 더 좋을수록 이후 단계에서 소프트웨어를 디버그하는 것이 더 쉬워졌습니다.

예를 들어 : 모든 불량 입력을 처리 할 일반 엑스 피톤이있는 경우 오류가 있으면 메소드에 전달 된 모든 것을 살펴 봐야합니다. 모든 유형의 나쁜 조건에 대한 실습이 있다면 어디를 볼 수 있는지 알 수 있습니다.

나에게는 가능해 보이지만 전제 조건을 다루는이 방법을 계속하려면 클래스 방법 당 N 예외 클래스로 끝날 것입니다. '비 기능적'클래스의 폭발적인 성장처럼 보입니다.

나는 항상 '핵심'기능이 전제 조건 위반을 처리하지 않은 코드를 좋아했습니다. 그런 다음이 코드는 '전제 조건 검사기'로 래핑 할 수 있습니다. 하다 예외를 던지거나 불만족하지 않으면 알 수 있습니다.

클래스를 만들어야하는지 여부를 결정하는 매우 일반적인 방법 (예외는 클래스입니다)은 다른 모든 클래스와 고유 한 코드가 있는지 여부를 결정해야합니다 (이 경우 예외).

그렇지 않다면, 나는 단지 예외에서 문자열을 설정하고 그것을 하루라고 부릅니다. 예외에서 코드를 실행하는 경우 (아마도 예외를 호출하여 여러 상황을 처리 할 수있는 일반적인 복구 메커니즘 일 수 있음) 유용 할 수 있습니다.

예외가 항상이 규칙을 따르는 것은 아니라는 것을 알고 있지만 언어가 제공하는 예외는 비즈니스를 알지 못하기 때문에 비즈니스 논리를 가질 수 없기 때문에 다소 생각합니다. OO 규칙에 대한 예외가 있습니다)

벤이 여기에 목표를 달성하고 있다고 생각합니다. 당신이 그들을 잡지 않겠다면 다른 예외를 던지는 요점은 무엇입니까? 당신이 정말로 다른 것을 던지고 싶다면 나는 그들이 모두 파생 된 일반적인 "preconditionfailedexception"기본 클래스를 가지고 있고, 어떤 종류의 상속자로 구성하려고 시도하여 그룹을 잡을 수 있습니다. Personly, 나는 다른 것이없고 각각의 실패에 대한 세부 사항으로 던지는 일반적인 예외가 있습니다.

아니, 각 전제 조건에 대해 특정 예외를 만들어서는 안됩니다. 왜냐하면 설계 별 원칙에 위배되기 때문입니다.

사전 조건을 구현하는 기록은 문서의 일부 여야하며 발신자가 모든 전제 조건이 유효한지 확인하는 데 필요한 방법을 제공해야한다는 것입니다. (예 : 메소드 실행이 객체의 상태에 의존하는 경우, 상태를 확인하는 메소드는 발신자에게 사용할 수 있어야합니다).

따라서 발신자는 방법을 호출하기 전에 모든 전제 조건이 충족되는지 확인할 수 있어야합니다.

위반 된 각각의 사전 조건에 대한 구체적인 예외를 구현하면 발신자가 메소드 호출 주변의 시도/캐치 패턴을 사용하도록 권장 할 수 있습니다.

나는 당신이 그들을 선택하지 않은 예외 (Java에서 runtimeexception의 서브 클래스)로 만드는 한 괜찮다고 말할 것입니다. 그러나 Java에서는 주장 만 사용하는 것이 좋습니다.

이렇게하면 다른 일반적인 사용자 정의 예외에서 모두 상속 받으십시오.

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