2011-08-19 97 views
1

我必須設計一個DAO,可以調用REST WS。 此WS必須從給定的用戶名和密碼中返回用戶憑證。Rest Dao設計和異常處理

案例1:找到用戶=> REST WS發送http代碼200和憑證響應。

情況2:未找到用戶=> REST WS發送http代碼400和一個包含原因的錯誤對象。

案例3:找到了用戶但他的帳戶被禁用了=> REST WS發送了http代碼400和錯誤對象與原因。

案例4:REST WS不可

什麼是我的DAO映射REST WS響應的最佳方式?

1 - 我在我的DAO中拋出funtionnal checked異常來處理錯誤對象的情況,並且我在正常情況下返回憑證響應對象。當REST WS不可用時,我拋出未經檢查的異常

2 - 我不會在我的DAO中拋出任何函數異常,因爲它是服務層的工作。我返回REST WS返回的內容,例如包裝對象中的憑證響應和錯誤響應,例如,我讓服務層檢查這些對象以執行正確的工作。當REST WS不可用時,我拋出一個未經檢查的異常

3 - 我只對錯誤情況拋出未經檢查的異常,並讓服務層決定如何處理它。我只返回憑證響應。

非常感謝您提前。

回答

1

我更喜歡選項1,因爲您的DAO負責理解遠程數據源返回的內容。您的服務層位於DAO之上,不需要了解遠程源的任何複雜性;這包括如何通過電線返回錯誤。

+0

好的,謝謝,併爲檢查VS選中的選擇?爲什麼1而不是3? – rico

+0

我的_個人首選項總是在服務層可以做一些值得做的事情時進行檢查。這迫使服務層dev真正考慮當用戶沒有找到時會發生什麼,等等。 99%的時間一些業務規則將決定一些特殊的邏輯應該發生。根據我的經驗,對'未找到'類型條件進行未檢查通常只會在運行時結束於NPE。我真的很喜歡編譯時間檢查。 – Brad

1

HTTP協議中的4XX響應被定義爲客戶端錯誤,我認爲可以在DAO層中引發異常。那麼錯誤對象就是拋出異常的表示。

如果您應該拋出一個檢查或未經檢查的異常可能會持續很長的討論,並最終基礎取決於個人的喜好或項目一般編碼準則。通過拋出異常,您可以將異常類型映射到相應的HTTP錯誤代碼,例如BadCredentialsException成爲HTTP錯誤400任何不能映射成爲一個500內部服務器錯誤