[英]Can we handle a exception from dao layer to presentation layer without impacting the service layer(no modification in service layer)
該場景就像我編寫了一個基於MVC的應用程序:控制器-服務-DAO層。 現在,我在DAO層中有一個異常,我想在表示層中處理該異常,以便服務層無需更改。
因為通過使用常規的try/catch
或throws
它必須通過我不需要的服務層。
有沒有更好的方法來實現呢?
class Controller{
method1(){}
}
class service(){
method1Serice(){}
}
class DAO(){
method1DAO(){
// exception occurs here
}
您可以讓DAO
類拋出未經檢查的異常。 ( RuntimeException
任何子類都可以)。 您可以創建自己的自定義例外,也可以使用任何預定義的例外。 只需確保Service
沒有捕獲Throwable
並且您可以讓Controller
捕獲它即可。
您可以從RuntimeException擴展異常類,以便編譯器不會抱怨異常處理。 然后,您可以在表示層中捕獲該異常。
也許您正在尋找基於Controller Based Exception Handling
,可以在Spring MVC的異常處理中檢查這些內容,也可以在Spring 的REST中檢查錯誤 。
@ExceptionHandler(YourException.class)
public String handleException(){
logger.info(message);
return "database_error";
}
實際上,我建議您在Service-Layer
正確處理異常,並正確封裝該異常,以通過Controller-Layer
返回給前端用戶。
通常, checked exceptions
攜帶一些有意義的消息,這些消息可用於進行恢復或讓調用方顯式正確地對其進行處理。 盡量不要直接避免它,因為它在那里。
據我了解, 數據訪問對象 (DAO)用於在服務器和客戶端之間傳輸數據。 我假設客戶端就是您所說的表示層 。 換句話說,最終用戶與之交互的部分。 這樣,DAO應該只包含字段和訪問器方法,即它不應包含邏輯。 因此,它不應包含可能引發異常的方法。 所以我建議也許重新設計您的應用程序。 否則,也許您可以提供更詳細的代碼?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.