處理方法中發生的已知錯誤的一些好方法是什麼?處理方法中的已知錯誤和錯誤消息
讓我們用戶註冊方法,例如,當用戶註冊時,調用方法SignUp(User user)
。有幾個已知的錯誤可能發生。
- 電子郵件已經被註冊
- 用戶名已經被註冊
- 等
你可以拋出特殊例外情況:
public void SignUp(User user)
{
// Email already exists
throw new EmailExistsException();
}
現在具體的例外可能被捕獲。
這在我看來是不好的,因爲被用於流量控制的異常。
你可以返回一個布爾值,說明是否成功,並通過在如果出現錯誤,將被置的錯誤消息:
public bool SignUp(User user, out/ref string errorMessage)
{
// Email already exists
errorMessage = "Email already exists.";
return false;
}
我不喜歡這樣的幾個原因。
- 值已被退回。如果該方法需要返回值,該怎麼辦?
- 每次都必須傳遞錯誤消息。
- 該方法的消費者應該是決定消息內容的人。
讓我們只說方法中的實際消息集是壞的。
您可以使用錯誤代碼:
public enum Errors
{
Successful = 0,
EmailExists,
UsernameExists,
Etc
}
public Errors SignUp(User user)
{
// Email already exists
return Errors.EmailExists;
}
// or
public void SignUp(User user, out/ref Errors error)
{
// Email already exists
error = Errors.EmailExists;
}
這裏的最後一個是我最喜歡的,但我還是不喜歡它了一大堆。我不喜歡傳入錯誤代碼的想法。我不喜歡返回代碼的想法。
我喜歡使用自定義異常,因爲它似乎有點吸塵器的想法,但我不喜歡使用異常流量控制的思想。也許在這個例子的特定情況下,系統SHOULD中的電子郵件是個例外,並且沒關係。
有什麼其他人在這種情況下怎麼辦?
可能重複http://stackoverflow.com/questions/409563/best-practices-for-exception-management- in-java-or-c) – 2010-10-13 17:18:14