2010-01-12 8 views
1

하나의 객체를 사용하고 일부 객체를 사용하는 함수 (X)가 있다고 가정 해 보겠습니다. 그것은 어떤 방법으로 실패 할 수 있습니다컬렉션을 처리 할 때 예외는 어떻게 처리해야합니까?

function X(obj) throws SomeException 

그리고 나는이 개체의 컬렉션을 가지고 있고, 그들 모두에 X를 실행하려면. 그래서 자신의 기능에 그 마무리 :

function Y(objs) 
    foreach obj in objs 
    X(obj) 
    end 
end 

X에 의해 반환되는 예외를 처리하는 가장 좋은 방법은 무엇입니까?

하나의 확실한 선택은 예외를 전혀 catch하지 않아서 컬렉션의 처리가 첫 번째 실패시 중지되도록하는 것입니다.

또 하나의 예외가 발생하면 각 예외를 catch하여 따로 보관해야합니다. 결국, 예외가 있다면 새로운 예외를 던질 수 있습니다. 선택적으로 이러한 예외를 새 예외의 중첩 예외로 포함하도록 선택할 수 있습니다.

또 하나는 예외를 완전히 무시하고 성공/실패를 표시하는 부울 배열과 같은 것을 반환하거나 발생한 예외 배열을 반환하는 것입니다.

답변

1

당신이하고있는 일의 내용에 따라 크게 달라집니다.

모든 항목을 처리해야하는 경우 첫 번째 예외에서 깨는 것이 가장 좋은 옵션 일 수 있습니다.

제 3 자 출처에서 파싱 된 항목이 많으며 실패한 항목을 기록하고 상태 개체를 반환하면 실패 할 것으로 예상됩니다.

1

내가 나열한 세 가지 모두 유효하다고 생각하며 어떤 것을 선택하는지는 특정 용도에 따라 달라집니다. 즉, 귀하의 응용 프로그램에 가장 적합합니다. "베스트 프랙티스"는 애플리케이션 로직을 능가 할 수 없으며 잘 작성된 관행은 로직을 규정하지 않습니다.

1

아무런 정답이 없습니다.

당신이 말한 것은 모두 옵션입니다. 당신은 아무것도 할 수 없으며 전파 할 수 있습니다. 예외가 발생했을 때 어떤 개체가 처리되었는지에 대한 자세한 정보를 잡아서 즉시 재 게시 할 수 있습니다. 선택적으로 모든 예외를 포착하고 끝에 하나의 예외를 throw 할 수 있습니다. 예외를 catch하고 기록 할 수 있으며 전혀 다시 게시하지 않을 수 있습니다.

때때로 나는이 모든 기술을 사용했습니다. 앱이 구체적으로 수행하는 작업과 비즈니스 요구 사항에 따라 달라집니다.

1

이것은 완료 후 목록 상태에 완전히 의존합니다.

특정 항목이 올바르게 처리되지 않는 경우 을 삼키거나을 입력하거나 성공/실패를 나타내는 부울을 반환합니다.

모든 항목을 올바르게 처리해야하는 경우 거품을이 아닌 거품으로 처리해야합니다.

예외 목록이 작성되는 것을 피하려면 원하는 항목을 먼저 확인하고 필요한 상태를 충족하지 않는 항목 목록을 반환 할 수 있습니다.

1

답변은 전적으로 개체로 수행중인 작업과 발생하는 상황에 따라 다릅니다.

모두 처리하지 않아도된다면 분명히 열심히 실패하고 실행을 종료하고 싶지 않으므로 예외 정보에 대한 호출 코드 액세스가 도움이 될 수도 있고 그렇지 않을 수도 있습니다.

모든 것이 처리되는 것이 중요하다면, 실패했다는 것을 나타내는 값을 반환하거나 프로그램 상태에 중요한 작업 인 경우 예외를 버블 업하십시오.

1

이것은 매우 미끄러운 슬로프입니다. 예외를 처리하려면 프로그램이 프로그램의 상태를 예외가 발생하기 전의 상태로 복원하여 의미있는 작업을 계속할 수 있어야합니다. 그렇게하기가 힘들어 질 것입니다. 컬렉션에는 분명히 처리 할 수없는 객체가 포함되어 있습니다. 주를 복원하려면 컬렉션을 복원해야합니다.

아마도 그렇게 할 수 있습니다. 그러나 스 니펫의 코드에는 컬렉션에 객체를 입력하는 코드가 없습니다. 상태를 복원하는 방법을 모르는 경우에는 예외를 잡아서는 안됩니다.

1

글쎄요. 나는 꽤 똑같습니다. 그러나 어떤 경우에는 더 옳거나 틀린 대답을 의미합니다.
재발행 예외를 캡처하고 계속하려면 기계에 비용이 많이 들지만 원하는 동작이 될 수 있습니다.
두 개의 포인터를 제공 할 수 있습니다 :
- 수집 프로세스를 잘못 처리하려는 경우 예외를 캡처하고 마음에 들지는 무엇이든 할 수 있습니다.
- 일부 항목이 쓰기 또는 잘못된지를 주장하려는 경우 모두 표시하고 모두 캡처해야하며 기분이 좋으면 그냥 기록하거나 버리거나 모든 '내부 예외'를 저장하고 다시 게시하십시오. 프로세스가 끝나면 모두 처리하십시오.

정확히 어떤 상황입니까?

관련 문제