簡體   English   中英

我應該如何處理服務層中的異常?

[英]How should I handle exceptions from my service layer?

我在GUI層中使用DataAnnotations來顯示表單中的錯誤消息,但是我對如何處理服務層中的異常以及如果發生異常如何顯示用戶有一些疑問。

為了與服務層通信,我使用了請求和響應類。 例如:

public class RegisterUserRequest
{
    public string Username { get; set; }
    public string Password { get; set; }
    public string Email { get; set; }
}

我應該在setter方法內的請求類中檢查空值嗎? 還是我應該在服務中這樣做? 我認為在請求和響應設置器方法上執行此操作並在參數為null時拋出ArgumentNullException是有意義的。

在我的服務類中,例如當用戶名或密碼無效時,我拋出InvalidOperationException 這是拋出異常的正確選擇嗎?

我還有一個問題是,是否應該捕獲所有異常,如果可以,我該如何告知用戶該異常? 例如,如果某些屬性為null,則應拋出ArgumentNullException 但是我應該讓用戶知道嗎?

當用戶名無效時,我拋出InvalidOperationException 我確實想向用戶顯示此字符,因為它告訴用戶應至少使用3個字符或其他字符。

我認為我應該使用InvalidOperationException的錯誤消息顯示給用戶,並在發生其他異常(例如:“糟糕,出現問題”)時重定向到標准錯誤視圖。

我將再次使用DataAnnotations,因為如果沒有人為用戶名或密碼輸入錯誤的格式,則沒人希望將其重定向到錯誤頁面。

我認為,當用戶名或密碼無效時引發的更相關的異常是ArgumentException。 在對該異常類型的描述中,它專門涵蓋了參數無效的情況。

至於將異常傳遞給用戶,您應該嘗試將錯誤通知用戶,而不暴露服務的任何內部工作,因此,如果有一條包含錯誤消息“無效的用戶名-必須至少為3個字符”,則將顯示響應消息。給他們有用的反饋。

對於您不想詳細傳遞的錯誤,我建議您自己記錄一條錯誤消息,然后將錯誤ID傳遞給用戶。 例如:“發生了未處理的錯誤。請聯系支持,並提供錯誤ID xxx”。 但是,這僅應作為最后的手段-最好通知用戶如何解決它,但這將是捕獲所有錯誤而不將過多信息傳遞給客戶端的一種合適方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM