2016-11-04 3 views
2

내 코드에 대해 잘 모르겠다. 먼저 Blob Azure에 저장하고 성공했다면 URL을 데이터베이스에 저장하고 싶다.이 작업에는 두 가지 방법이있다. 첫 번째는 이라는 boolean variable을 사용하고 flag 값이 true로 설정된 경우 데이터베이스에 저장할 수 있지만이 방법이 가장 적합한 지 확실하지 않습니다. ? 그것은 어떤 이유로 파일이 그 flag 값이 true로 설정되어 발생하는 경우에도 Blob에 업로드되지 않는다는 것을 가능하십시오 try catch를 사용하는 것이 더 나은 방법을catch 블록 또는 부울 플래그를 사용 하시겠습니까?

using (Stream fileStream = file.InputStream) 
{ 
    blockBlob.UploadFromStream(fileStream); 
    flag = true; 
} 

if (flag == true) 
{ 
    Urls.Add(blockBlob.SnapshotQualifiedUri.ToString()); 
    db.Save(); 
} 

또는해야한다 : 첫 번째 방법은 boolean flag variable를 사용하여 블록?

try 
{ 
    using (Stream fileStream = file.InputStream) 
    { 
     blockBlob.UploadFromStream(fileStream); 
    } 
} 
catch(Exception) 
{ 
//do something 
} 

Urls.Add(blockBlob.SnapshotQualifiedUri.ToString()); 
db.Save(); 

각 방법의 차이점은, 개인적으로는 try catch이 더 나은 접근해야한다고 생각 당신의 대답에 설명하지만 여기에서 확인 :)

+1

'flag'는 예외를 throw하지 않는 한 항상 true로 설정됩니다 (실패 할 경우 가정 할 것입니다). 그래서 나에게 깃발은 아무 것도하지 않을 것입니다. 다음 코드는 어쨌든 실행되지 않을 것입니다. 'UploadFromStream' 바로 다음에'Add'와'Save'를 놓고 try/catch로 감싼다면 어떨까요? – Rob

+2

'UploadFromStream()'이 예외를 던지면'flag'의 값은 절대로'true'로 설정되지 않습니다 (메소드가 설정되기 전에 종료됩니다) –

답변

2

는 일반적으로 다음과 같이 incases 싶지하십시오, 나는 갈 두 가지를 결합하여 업로드를 처리하고 업로드가 성공했는지 또는 예외가 발생했는지에 따라 true 또는 false를 반환하는 메서드를 만듭니다.

try catch를 사용하면 잠재적 예외가 적절하게 처리 될 수 있으며 플래그는 프로세스가 성공했는지 여부를 알려주는 지표가됩니다. 과 같이 호출 다음 방법을

public static bool TryUploadFile(this CloudBlockBlob blockBlob, File file) 
    try 
    { 
     using (Stream fileStream = file.InputStream) 
     { 
      blockBlob.UploadFromStream(fileStream); 
     } 

     return true; 
    } 
    catch(Exception) 
    { 
     //do some logging or other error handling 
    } 

    return false; 
} 

을 그리고 :

예를 들어, 업로드 코드,이 같은 확장 방법을 만들 것입니다 사용 여부에 대한

bool succeeded = blockBlob.TryUploadFile(file); 

if (succeeded) 
{ 
    Urls.Add(blockBlob.SnapshotQualifiedUri.ToString()); 
    db.Save(); 
} 
1

일반적으로 결정을 함수가 성공하는지 여부를 나타내는 예외 또는 반환 값은 함수가 실패 할 가능성에 따라 다릅니다.

예외 처리는 상당히 비싸지 만 예외적 인 경우에만 사용되는 경우 성능 문제가 발생하지 않아야합니다.

예외 처리의 장점은 코드를 훨씬 깨끗하고 이해하기 쉽고 유지 보수 및 변경하기가 더 쉽다는 것입니다.

작업이 성공했는지 여부를 나타내는 반환 값이 없기 때문에 대개 작업이 성공하지 못한다는 사실이 나타납니다. 예를 들어, 파일을 여는 것과는 대조적으로 이것은 종종 실패 할 수 있으며 반환 값을 사용하여 실패를보고합니다. 이러한 기능은 거의 실패하지 가정되도록,

세 가지 사용 기능, UploadFromStream, AddSave는 반환 값을 나타내는 성공을 사용하지 않는 (또는 적어도 당신은 당신이 반환 값을 필요가 있다고 생각하지 않습니다).

그런 경우에는 예외 메소드를 사용합니다. 코드는 훨씬 더 깨끗해 보일 수 있습니다.

public void Upload(...) 
{ 
    try 
    { 
     using (Stream fileStream = file.InputStream) 
     { 
      blockBlob.UploadFromStream(fileStream); 
     } 
     Urls.Add(blockBlob.SnapshotQualifiedUri.ToString()); 
     db.Save(); 
    } 
    catch(Exception exc) 
    { 
     ProcessProblem(exc); 
     throw new MyUploadException(..., exc); 
     // or just throw exc 
    } 
} 

이제 코드가 상당히 단순 해 보입니다. 임시 변수를 사용하여 진행 상황을 기억할 필요가 없으며 문제가 발생하면 로깅이 수행됩니다.사용 설명서의 끝에 Dispose가 잘못되었을 때와 같이 예기치 않은 곳에서 예외가 발생하는 경우에도 마찬가지입니다.

이 기능은 더 나은 유지 보수가 가능합니다. 예외적 인 추가 함수를 추가하면 실패하고 예외를 추가하면 catch 블록이 문제를 처리합니다.

기본 규칙 : 예외가 예외 인 경우 예외를 사용하십시오. 그렇지 않으면 반환 값을 사용하십시오.

관련 문제