2017-09-25 1 views
0

DAO를 사용하여 데이터베이스에 액세스하고 이러한 DAO 메서드가 SQL 예외를 throw하므로 DAO 메서드가이 예외를 throw하도록 만듭니다.내 메소드가 예외를 던지기를 어느 시점에서 끝내야합니까?

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 예외를 처리 할 수있는이 방법은 때때로 아주 나쁜 보인다 : 그것은 모양에

그럼 난, 서비스를 통해 DAO의를 액세서. 내가 서비스 또는 dao에서 예외를 처리해야합니까? 아니면 어디에서나 예외를 확인해도됩니까?

+1

에 달려 있습니다. 당신은 단 하나의 도서관 이용자입니까? 그것을 사용하는 모든 응용 프로그램에 대해 동일한 오류 처리를 원하십니까? ... 누군가 다른 사람이 그것을 사용하고, UI의 특정 오류 메시지를 원한다면 백엔드의 모든 것을 처리해야합니다. 무엇을 달성하려고하는지에 따라 달라집니다. – Stultuske

+1

사용자가 원하는만큼 멀리 던져야합니다. 오류 메시지와 함께 표시되어서 뭔가 잘못되었다는 것을 알게됩니다. 또한 GUI와 비즈니스 로직을 분리해야합니다. – XtremeBaumer

답변

2

매우 주관적 일 수 있습니다. 예외는 어디에서 처리해야합니까? 그것은 당신에게 달렸습니다. 규칙은 없습니다. 내 충고 : 당신이 그것을 기록하고자하는 장소에 도착할 때까지 계속 예외를 던지십시오. "데이터베이스 액세스에 문제가 발생했습니다"메시지를 최종 사용자에게 표시하려면 모든 하위 계층 메소드 헤더에 "throws SQLException"이 있고 가장 높은 위치에 try-catch 만 있어야하는 것이 가장 쉽습니다 수평.

Btw, 당신은 "많은 곳에서"SQL 예외를 "처리"한다고 말하지만 예외를 위쪽으로 던지는 것은 일반적으로 처리라고하지 않습니다. try-catch를 사용하는 부분 만 예외를 "처리"합니다. 내 조언에 따르면, 가장 높은 계층이됩니다.

편집 : this answer 상태로, DAO에서 시도해보고 더 높은 레이어가 반드시 모든 데이터베이스 관련 기능을 사용할 필요가 없기 때문에 다른 (보다 일반적인) 예외를 던져 볼 수 있습니다. 세부. 그것은 당신의 상황에 따라 과잉이라고 할지라도 그것을하는 더 매끄러운 방법 일 것입니다.

+1

정확히 무엇을 권하고 싶습니다. 한 가지 더 명확한 설명 : 메소드가 정상적으로 복귀 할 수있는 유일한 상황 (예외없이)은 완전히 완료된 경우입니다. 그렇지 않으면 호출자에게 실패에 대해 알려야합니다. 예외를 throw하거나 기존 예외가 파급되도록합니다. –

관련 문제