예외 에 대한 Eric Lippert의 기사를 읽으면 생산자와 소비자 모두 예외에 어떻게 접근해야하는지 분명히 알 수있었습니다. 그러나 나는 여전히 예외를 던지는 것을 피하는 방법에 관한 지침을 정의하기 위해 고심하고 있습니다.
구체적으로 :
- a) 다른 사람이 레코드를 수정하기 전에 또는 b) 만들려는 값이 이미 존재 하기 때문에 실패 할 수있는 Save 메서드가 있다고 가정 합니다 . 이러한 조건은 예상되고 예외적이지 않으므로 예외를 발생시키는 대신 Try 버전의 Try 버전을 작성하여 저장 성공 여부를 나타내는 부울을 리턴하도록 결정합니다. 그러나 그것이 실패하면, 소비자는 어떻게 문제가 무엇인지 알 수 있습니까? 아니면 결과, Ok / RecordAlreadyModified / ValueAlreadyExists의 종류를 나타내는 열거 형을 반환하는 것이 가장 좋습니까? integer.TryParse를 사용하면 메소드가 실패 할 수있는 이유가 하나뿐 이므로이 문제는 존재하지 않습니다.
- 이전 예제는 정말 까다로운 상황입니까? 아니면이 경우 예외를 던지는 것이 선호되는 방법입니까? Entity 프레임 워크를 포함하여 대부분의 라이브러리 및 프레임 워크에서 수행되는 방식입니다.
- 메소드의 시험 버전을 작성하는시기와 메소드가 작동하는지 사전에 테스트 할 방법을 제공하는 시점을 어떻게 결정합니까? 현재 다음 지침을 따르고 있습니다.
- 경쟁 조건이 발생할 경우 체험판을 만듭니다. 이것은 소비자가 외인성 예외를 잡을 필요를 방지한다. 예를 들어, 앞에서 설명한 저장 방법에서.
- 조건을 테스트하는 메소드가 원래 메소드가 수행하는 모든 작업을 수행하는 경우 Try 버전을 작성하십시오. 예를 들어 integer.TryParse ()입니다.
- 다른 경우에는 조건을 테스트하는 메소드를 작성하십시오.