2010-03-03 5 views
1

현재 상태가 코드에 어떤 종류의 버그가 있음을 의미하는 비즈니스 객체가 있다고 가정 해 보겠습니다. 또는 기본적으로 자신의 데이터로 작업하고 있지만 어떤 규칙을 위반해서는 안되는 상태에있는 모든 시나리오. 저는 일반적으로 그러한 조건과 가정을 확인하기를 좋아합니다. 왜냐하면 초기에 버그를 잡을 수 있기 때문입니다. 그러나 그러한 논리 검사가 실패 할 경우 모범 사례는 무엇입니까?코드에서 유효하지 않은 비즈니스 객체를 어떻게 다루어야합니까?

Debug.Assert 문은 매우 유용하지만, 디버그 모드로만 나타나기 때문에 테스터 나 릴리스 단계에는 나타나지 않기 때문에별로 좋아하지 않습니다. 분명히 여전히 많은 버그가 포함될 수 있습니다. 나는 차라리 코드에서 발생하는 문제를 디버깅하는 것과는 대조적으로이 검사가 실패했다는 정보를 많이 얻는다. 내 솔루션은 어떤 종류의 예외를 던지는 것처럼 보입니다. 이것은 좋은 생각입니까?

답변

0

일반적으로 비즈니스 오브젝트 자체에서 이러한. 제점을 확인하고 예외를 _ 생하면 무시 상태의 오브젝트가 _ 생할 수 있습니다. 이러한 예외를 포함 (이에 제한되지 않음) : 인수

  1. IllegalArgumentException 해당 전달되는 (객체 잘못된 상태로 구동 될 수있는 경우에 대한 (금지 예컨대 NULL)
  2. IllegalStateException 허용되지 않는다 같은 비즈니스 오브젝트로 인수가 무효 인 시나리오)

구별 자체은 결코 유효하지 않습니다.

나는 이러한 상황을 즉시 확인합니다. 필자가 피하고자하는 필사적 인 시나리오는 잘못된 상태에있는 개체를 수정하는 것입니다. 나중에 만 발견 할 수 있습니다 (나중에 수 년 후 - 그러한 개체를 직렬화하고 지금부터 1 년 간 비 직렬화한다고 상상해보십시오). 그렇게되면 불가능한 문제의 근원을 발견하게 될 것입니다.

이 검사가 제작 단계 에서뿐만 아니라 개발 단계에서도 발생하기를 바랍니다. 일반적으로 그러한 점검을 수행하는 데 드는 비용은 정상 작동에 소요되는 시간과 비교할 때 무시할 수 있으며, 특히 그러한 시나리오에서 되돌리려는 데 걸리는 시간과 비교하면 적습니다.

1

당신은 절대적으로 예외입니다.

Exception 클래스를 확장하고 이러한 경우 확장 된 버전을 사용할 수 있습니다. 이렇게하면 필요에 따라 응용 프로그램을 로깅하고 중지하기 위해 체인에서 더 많이 처리 할 수 ​​있습니다.

try 
{ 
} 
catch(MyException ex) 
{ 
    ex.LogError(); 
    if(ex.IsCritical) 
    throw ex; 

} 
0

예, 제 생각에는 올바른 방법입니다. 예외는 거품을 일으키며 눈에 띄지 않게되어 문제의 원인으로 되돌아 갈 수 있습니다.

관련 문제