2009-01-24 67 views
1

當我需要從函數返回錯誤消息,如果沒有錯誤發生,我通常做類似下面的例子,我只是返回一個empyty字符串。這是最佳實踐,還是有函數返回錯誤消息的方式?從函數返回錯誤的最佳做法是什麼?

Function Test() as String 
    ' Do something 
    If error occured Then 
    Return "Some error message" 
    Else 
    Return ""  
End Functon 
+0

感謝您的信息 - 將做一些閱讀exeption處理。 – 2009-01-24 17:00:56

回答

6

Exception Handling是處理錯誤的首選方法。使用函數的開發人員可能會忽略錯誤代碼返回值。例外情況迫使他們注意。這絕對值得學習。

當你在你的問題寫的代碼,你可能認爲它會被稱爲是這樣的:

String message = Test(); 
// process the message for errors. 

很多開發商只會繞過處理消息,甚至調用你的函數是這樣的:

Test(); 
// go about your business, happily ignoring the error message 

如果您的代碼拋出異常,而不是被忽略。開發人員必須至少承認通過在你的函數調用中加入try塊來拋出異常。那時他們被迫做點什麼。

0

我同意,一般來說,當方法不會返回一個值時,您會希望使用異常來處理錯誤。但是,如果該方法確實返回一個值,那麼在某些情況下您可以並且可能應該使用返回值。例如,如果您試圖從鍵控集合中檢索對象並且鍵不存在,那麼返回null作爲不存在的證據而不是拋出異常是完全合理的。然而,你的情況似乎並不適合這種情況,而且我會考慮例外情況。

4

正如Erik和Bill所說的,異常是在.NET中傳播錯誤的正常方式。但是,有些情況下他們不合適 - 例如驗證用戶輸入。在這一點上有幾個備選方案:

  • 使用錯誤代碼(例如枚舉)來指示錯誤的類型。例如,您可能有一個「密碼太短」代碼,另一個代碼爲「密碼不包含任何數字」等。

  • 以您在問題中建議的方式使用錯誤消息。我個人會使用null引用來表示「這是好的」情況,或者可能使該方法返回一個布爾值(有效/無效),併爲錯誤消息提供out參數。使用字符串對於國際化來說很糟糕,但在許多方面比錯誤代碼版本更簡單(避免額外的查找,更容易添加新類型的錯誤等)。對於永遠不需要國際化的內部應用來說,這可能會很好。

我強調的是,這些僅選擇例外哪裏沒有意義 - 否則,例外的是要走的路。

+0

我知道傳統的觀點是「不要使用異常來處理非例外錯誤,例如驗證用戶輸入」,但我覺得它很可疑。例外讓你可以毫不費力地通過圖層傳播一個錯誤,所以你可以在有意義的地方檢測和處理它,而不是在每一層。 – 2009-01-24 16:34:00

1

請求響應模式可以幫助處理錯誤以及許多可能失敗的方式。例如,信用卡認證過程中,你可能有:

class CreditCardAuthenticationRequest { 
    string CreditCardNumber; 
    string FullName; 
    ... 
} 

class CreditCardAuthenticationResponse { 
    CreditProcessorStatusCode Status; 
    CreditProcessorWarnings[] Warnings; 
    CreditProcessorErrors[] Errors; 
    Exception Exception; 
    ... 
} 

現在突然所有的錯誤處理和驗證可以包含在一個整潔的小包裝。 DoFactory.com的Patterns in Action sample application廣泛使用。

相關問題