簡體   English   中英

我們能否在不影響服務層的情況下處理從dao層到表示層的異常(服務層中沒有任何修改)

[英]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/catchthrows它必須通過我不需要的服務層。

有沒有更好的方法來實現呢?

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.

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