2017-09-25 36 views
0

我使用DAO來訪問我的數據庫,並且這些dao方法拋出SQL異常,所以我讓它使得dao方法拋出這個異常。我的方法應該在哪一點停止拋出異常?

然後我存取權限DAO的通過服務,它看起來像:

public class UserService implements Service { 

    public int addNewUser(String username, String password) throws SQLException { 
     User user = new User(username, password); 
     UserDao dao = new UserDao(source.getConnection()); 
     return dao.add(user); 
    } 
} 

這些方法拋出異常太多,但這種方式,我必須處理許多地方的SQL異常,有時它看起來相當糟糕。我應該在 服務或道路上處理例外情況嗎?還是可以在任何地方檢查異常情況?

+1

取決於。你是唯一使用圖書館的人嗎?你是否想要爲使用它的所有應用程序提供相同的錯誤處理? ...如果有人使用它,想要在UI上的特定錯誤消息,並且你在後端處理所有事情......這一切都取決於你試圖實現的目標 – Stultuske

+1

儘可能地拋出它,以便用戶將會顯示一條錯誤消息,以便他知道某些錯誤。你也應該嘗試分離GUI和業務邏輯 – XtremeBaumer

回答

2

這可能會相當主觀。你應該在哪裏處理你的例外?這取決於你,沒有規則。我的建議是:不斷向上拋出異常,直到你到達想要登錄的地方。如果要顯示「數據庫訪問出錯了 - 向最終用戶發送消息」,則最簡單的方法是在所有低層方法頭文件中都有一個「throws SQLException」,並且只有最高級別的try-catch水平。

順便說一句,你聲明你「處理」SQL異常「在很多地方」,但向上拋出異常通常不稱爲處理。只有使用try-catch的部分「處理」異常,根據我的建議,這是您擁有的最高層。

編輯:作爲this answer的狀態,您可能想嘗試在您的DAO中捕獲它,並向上拋出一個不同的(更通用的)異常,因爲較高層不一定具有所有這些數據庫特定的用法細節。這將是一個更奇特的方式來做到這一點,雖然它可能是矯枉過正,這取決於你的情況。

+1

正是我所推薦的。再一次澄清:一種方法被允許正常返回(無一例外)的唯一情況是它是否完全履行其工作。否則,它必須告訴調用者有關失敗的信息:拋出異常或讓現有異常漣漪通過。 –

相關問題