2009-08-27 5 views
3

일부 업무에 중요한 작업에 대한 감사 서비스를 작성하고 있습니다. 이 서비스는 IoC 패턴을 사용하여 구현됩니다.내 자신의 비 LINQ 코드에서 DuplicateKeyException을 사용해야합니까?

이 때문에 구현과 관련이없는 예외를 발생시킬 필요가 있습니다.

감사 프로세스의 정보에는 고유 한 키가 포함되어 있습니다. 감사 프로세스의 일부로 주요 고유성 검사를 제공하는 것이 현재 서비스 요구 사항입니다. 중복 키는 프로세스 요구 사항을 위반합니다.

현재 서비스는 SQL-Server에 대한 쓰기로 구현됩니다. 가능성은 낮지 만 키가 중복 될 수 있습니다.이 경우 SqlException이 기본 키 제약 조건 위반에 대해 불만을 제기합니다. 잡히고 새로운 키를 생성하는 프로세스를 허용 할 수있는보다 일반적인 "중복 키"예외에서이 예외를 감싸는 것이 좋습니다.

일반적으로 나는 새로운 예외 클래스를 생성하는 것을 싫어합니다. 동일한 정보를 전달하는 데 사용할 수있는 거의 항상 적합한 유형이 있습니다. 이전에 System.Data.Linq.DuplicateKeyException을 잡았습니다. LINQ 관련 네임 스페이스에서 온다는 점만 빼고는 여기에 던질 수있는 좋은 후보로 보입니다. 내 인터페이스는 LINQ와 아무 관련이 없습니다. 어쨌든

  • 던져 System.Data.Linq.DuplicateKeyException을 아무도 너무 많이 네임 스페이스로 읽지 않습니다 희망 :

    내 즉시 옵션이 될 것으로 보인다.

  • System.InvalidOperationException을 던지고 다른 이유로이 예외를 throw 할 수있는 구현이 필요하지 않습니다.
  • 내 맞춤 설정 DuplicateKeyException을 던집니다.
  • 키 고유성을 확인하기 위해 인터페이스에 별도의 메소드를 작성하고 키와 값을 작성하기 전에 이것을 호출하십시오.

귀하의 의견은 무엇입니까?

답변

5

다시 사용하여 I은 기본 .NET 프레임 워크에 존재하는 예외를 빌려하지만 라인이 그려해야한다고 생각 때때로 다른 네임 스페이스에서 예외를. 개인적으로 예외를 다시 사용하기 위해 LINQ 네임 스페이스에 도달하면 해당 행이 교차합니다. 그것은 특별히 예외에 대한 이유를 잡기하는 것은 필요하다 가능성이 매우 어려울 것 같다 경우에 사용하는 합리적인 하나

사용 InvalidOperationException이 . 이것은 여기에 해당하지 않기 때문에 나는 그렇게하지 않을 것입니다.

사용자 지정 DuplicateKeyException 사용 이는 의미가 있습니다. 그러한 예외는 잡을 수있는 가능성이있다. 왜냐하면 코드가 그 코드에 대해 무언가를 할 수 있기 때문이다. 예외는 네임 스페이스에서 비롯되며 예외 처리를 돕기 위해 다른 관련 세부 정보를 추가 할 수 있습니다.

으로 인해 일을 변경 다른 스레드에 "isUnique에"와 키 중지한다이 고유하게 WriteAction 메소드를 호출 사이의 경우 가, 무슨 말을 일어나는 "isUnique에"방법을 추가 하시겠습니까?이 메소드를 사용하지 않으면, 코드를 검출하기 위해서 예외가 슬로우되고 (나쁜 일이 될 가능성이 있기 때문에),이 메소드가 도움이됩니다. 그러나 WriteAction에서 키가 유일하지 않은 것으로 밝혀지면 인터페이스의 소비자가 "IsUnique"메서드를 먼저 호출 할 것이라는 보장은 없습니다.

+0

좋은 답변입니다. 감사합니다. 짜증나는 대체물을 제거하는 과정에서 커스텀 예외가 필연적 인 최선의 선택이라고 생각합니다. –

관련 문제