2011-04-13 7 views
0

나는 이런 식으로 그들을 시도에서이 방법을 몸을 더 만약 내가 방황했다 SVC는 파일확인 인수는

public SomeDTO Method1(byte[] bitmapAsByteArr, DTO1 dto1, DTO2 dto2) 
    { 
     if(bitmapAsByteArr!= null && bitmapAsByteArr.Length > 0 && dto1!= null && dto2 != null) 
     { 
      return new SomeDTO(bitmapAsByteArr,dto1,dto2,1,2,3,4); 
     } 
     else 
     { 
      throw new ArgumentNullException(); 
     } 
    } 

에서이 방법을 썼다 .. 블록을 잡아라. 이 경우 더 좋은 점은 무엇입니까?

+2

당신은 예외를 _return_하지 말아야을 필요로하는 슬로우 추가하거나 변경하는 것이 쉬운 ** 던져 ** 그들해야합니다. –

+0

예 ... 내 실수 ... :) – Yanshof

답변

1

여기서 사용하고있는 패턴은 던지지 않고 예외를 반환한다는 점에서 잘못되었습니다. 나는 그 질문에 오류라고 생각한다. 그렇지 않다면 당신의 SomeDTO 객체는 어떻게 든 ArgumentNullException 클래스와 연결되어야 할 것이고 그것은 틀린 것이다.

당신이 할 수있는 것은 :
- 우리가 타당성에 대한 모든 인수를 확인한 다음 작업을 할 귀하의 솔루션,

if (are_all_arguments_ok) 
{ 
    //procedure code, possibly hundreds of lines 
} 
else 
{ 
    throw new SingleExceptionForAnyParameterIssues(); 
} 

- 삽입

try 
{ 
    //procedure code, possibly hundreds of lines 
} 
catch 
{ 
    //not really sure what we caught here 
    //could be a parameter problem, could be a code problem 
    throw new SingleExceptionForAnyParameterIssues(); 
} 
같은 try..catch의 코드,

는 - 방법의 헤드에있는 매개 변수를 점검

if (param1_is_null) 
{ 
    throw new ArgumentNullException("param1"); 
} 
if (param1_is_invalid) 
{ 
    throw new ArgumentException("bad, bad param1","param1"); 
} 
// other parameters are checked here 

//procedure code, possibly hundreds of lines 
,691

  • 그것은 매개 변수의 유효성을 확인하는 코드의 명확한 분리를 제공하고, 실제 작업 그것은 대신 더 세밀한 검사를 할 수
  • 을 수행하는 코드 : 때문에

    나는 (obviuosly) 세 번째 방법을 prefere 기본적으로 어떤 것을 지정하지 않고 무언가 잘못되었음을 알리는 단일 검사입니다.

  • 메서드의 시작 부분에 있으며 영역에 숨길 수 있으므로 메서드의 핵심을 검토 할 때 중점을 둘 필요가 없습니다. 적절한 코드.
  • 그것은 당신은이 어설 문을 로그인 또는 무엇이든 실제로
1

인수가 유효하지 않을 가능성에 따라 다릅니다. 잘못된 인수 예외적 인 또는 입니다.

try...catch 블록을 사용하면 정상적인 경우보다 코드가 깨끗 해지고 실행 속도가 빨라지지만 오류 사례는 더 느리게 실행됩니다.

잘못된 데이터로이 메서드를 여러 번 호출하면 응용 프로그램의 잠재적 인 느린 지점이되고 사용중인 폼의 코드가 약간 더 효율적입니다.

+0

나는 당신이 말하려고하는 것을 봅니다 -하지만 try..catch 블록을 사용한다면 매개 변수를 확인하는 것이 다음 레벨에 있어야합니다 - 예외가 필요합니다. 메서드 'Method1'에있는 것입니다. – Yanshof

+0

@ Yanshof - 기술적으로는, 대안은 코드가 실패하도록하는 것입니다. 그래서 null을 확인하고 ArgumentNullException을 던지기보다는 역 참조가 실패하고 함정에 빠지게합니다. – ChrisF

관련 문제