簡體   English   中英

處理spring + hibernate異常的位置和方式?

[英]Where and how handle spring+hibernate exceptions?

我使用spring + hibernate用於桌面應用程序。

我正在嘗試使用分層實現來構建它,所以我有:

GUI層 - 調用 - >服務層 - 調用 - > DAO層

一個小例子來更好地解釋我的情況:

// In GUI layer
private void actionPerformed(ActionEvent evt){
    addUser();
}

private void addUser(){
    // Check gui validation for user inputs
    if(inputIsValid()){
        String username=nameText.getText();
        String pass=passText.getText();
        //Now call service layer
        userService.createUser(username, pass);
        // Now here i want to show a message to user like
        // "Operation successful" or "Operation failed"
        // or more sofisticated message like "User with same name already exists"
    }
}


// Service layer
@Transactional
public void createUser(String name, String pass){
    User user=new User(name, pass);
    userDao.save(user);
}

// Another service layer example, 
@Transactional
public boolean createUser(String name, String pass){
    User user=new User(name, pass);
    try{
        userDao.save(user);
    }
    catch(Exception ex){
        Log(ex);
        return false;
    }
    return true;
    // In this case GUI layer can know if save is succesful, but it can't know WHY
    // the save is failed : some username? DB service shutdown? etc..
}

問題是:誰拋出異常並處理它?

我認為DAO必須拋出第一個異常,並且服務層重新拋出它,最后GUI層處理異常,所以我可以向用戶顯示消息,這個好嗎? 有一種方法可以使用spring構建一些ExceptionHandler嗎?

使用spring + hibernate管理異常的最佳實踐是什么?

謝謝。

我建議在你自己的異常類中包裝拋出的異常並讓它們冒泡到GUI層。

如果您正在使用Spring MVC,那么有一個編寫ExcpetionHandlerResolver的解決方案,請查看文檔

如果您不使用Spring MVC。 我建議將DAO中的異常拋出到Service,然后再拋到View層。 根據捕獲的異常,只有視圖層才能真正為用戶提供有價值的信息。

暫無
暫無

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

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