2011-10-11 4 views
2

현재 여러 유형의 파일 처리를 처리하는 시스템을 설계하고 있습니다. 다음 인터페이스를 정의했습니다.오류로 처리 할 수있는 구성 요소의 예외 또는 반환 상태

다양한 파일 유형을 처리하기위한 구체적인 구현을 만드는 것을 목표로합니다. 컨트롤러 클래스는 것입니다 책임에 대한 :

  • 하나의 호출에는 processFile (이러한 IFileProcessor 구체적인 구현
  • 하나의 컬렉션을 가져 오기 파일의 내용
  • 읽기 새로 추가 된 파일
  • 에 대한 폴더를보고) 각 파일의 내용을 전달하는 경우
  • 구성 요소가 파일을 처리 할 수없는 경우 false를 반환하고 그렇지 않으면 내용을 처리하고 true를 반환합니다.
  • IFileProcesso가 없으면 r 구현은 컨트롤러가 '처리되지 않은'폴더로 이동 한 파일을 처리 할 수 ​​있습니다.
  • 구성 요소가 파일을 성공적으로 처리하는 경우 '처리 된'폴더로 이동합니다.
  • 구성 요소에 의해 예외가 발생하는 경우 'Failed'폴더로 이동했습니다.

IFileProcessor의 구현을 만들면 먼저 해당 파일을 유형에 따라 처리 할 수 ​​있는지 확인합니다. 즉 그러면 최상위 유효성 검사 (즉, 파일 헤더 검사)가 수행됩니다. 이러한 검사 중 하나라도 실패하면 전체 파일이 유효하지 않은 것으로 간주되어 컨트롤러에 던져 질 것입니다.

그러나 최상위 유효성 검사가 성공하면 구성 요소는 파일의 각 행을 처리합니다. 이 시점부터 개별 라인이 처리 (즉, 검증)에 실패하고 나머지 프로세스가 계속 진행되는 것이 허용됩니다.

여기가 문제가되는 곳입니다. 유효성 검사 오류가 발생했는지 기록한 다음 프로세스가 끝날 때 예외를 던지거나 열거 형을 반환하도록 ProcessFile() 시그니처를 변경하는 것이 가장 좋습니다. 처리되지 않은, 처리되지 않은 처리 된 오류의)?

내가 읽은 바로는 예외가 상태 코드보다 선호되는 경로 인 것처럼 보이지만 프로세스가 계속 진행될 수있는이 특정 상황에서는 프로세스가 완료되지 않은 상태로 인공 예외를 사용하는 것이 잘못된 것으로 보입니다. %.

나는 이것에 대한 사람들의 생각에 정말로 관심이있다.

+0

이 문제를 지나치게 수정하지 마십시오. 파일에 문제가있을 때 행동을 취하기 위해서는 인간이 필요합니다. 당신이 할 수있는 의미있는 것은 아무것도 없으며, 좋거나 쓸모없는 것입니다. 이 사람이 볼 수있는 맑은 진단이 있는지 확인하십시오. –

+0

Hans,이 경우의 요구 사항은 구성 요소가 할 수있는 모든 것을 처리해야한다는 것입니다. 파일의 각 행은 해당 행의 참조가 시스템에 알려 졌는지 확인하는 유효성 검증 절차를 거칩니다. 참조가 알려진 경우 행이 처리되고 그렇지 않으면 유효성 검증 오류가 추후 검사를 위해 기록됩니다. – watsite

답변

2

한 가지 제안 :

대신 부울 또는 열거 형을 반환하는 것이 발신자가 검사 할 수있는 개체를 반환했다. 어쩌면 FileProcessorResult라고 부릅니다. 개체에서 전반적인 성공 또는 실패, 유효성 검사 상태, 처리 상태 등과 같은 모든 종류의 정보를 저장할 수 있습니다.

심각한 오류가 발생하는 경우 예외가 반환되므로 호출자가 올바른 작업을 수행 할 수 있습니다. . try catch가 깨끗해 지도록 예외 클래스를 파생시킬 수 있습니다.

예 : 내가 줄 수있는 절대적인 정답은 아마 없다

try 
{ 
    FileProcessorResult fpr = ProcessFile(Contents); 
    //Do something with fpr 

} 
catch (FileProcessorException fpe) 
{ 
    //Something unexpected occured during file processing, handle it 
} 

, 그래서 제안으로이를 확인하시기 바랍니다.

0

나는

그래도 난 당신과 동의

, 그것을 던져 이상한 보인다 ... 나는 분명 할이/어떻게 그 답을 볼 수 없습니다 같이이 절대 문제로 생각하지 않는다 부분 처리를 신호하는 함수의 끝에 예외, 나는 또한 반환 코드와 함께 갈 것이고 함수가 완전히 실패했을 때 (예를 들어, 파일 등을 읽지 못했을 때) 예외를 던질 것이다.

예외가 호출 함수에서 처리되지 않을 수 있으며 파일이 부분적으로 처리 된 경우 실행을 중지하지 않는 것이 좋습니다.

어떤 길을 선택하든, 던져진 반환 코드/예외를 철저히 문서화해야하며 다른 사람은 감사 할 것입니다.

관련 문제