강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

Junyoung_Choi님의 프로필 이미지
Junyoung_Choi

작성한 질문수

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

회원 서비스 개발

예외 validate하는 시점이 궁금합니다.

작성

·

256

0

강의를 연습하려고 설문조사 사이트를 만드려고 합니다. 설문 엔티티에는 설문 시작 시간과 설문 종료 시간 필드가 있는데, Controller에서 Dto로 객체 정보를 받으면 다음과 같은 예외 처리를 하려 합니다.

public void validateChangeableDateTime(){
    // 설문 시작 시점이 종료 시점보다 늦는지 검사
    if(startDate.isAfter(endDate)){
        throw new InvaildTimeToChangeError("End date can't be earlier than start date.");
    }
    // 이미 종료된 설문인지 검사
    if(LocalDateTime.now().isAfter(endDate)){
        throw new InvaildTimeToChangeError("Survey is closed.");
    }
    // 이미 진행 중인 설문인지 검사
    if(LocalDateTime.now().isAfter(startDate)){
        throw new InvaildTimeToChangeError("Survey is already in progress.");
    }
}

그런데 해당 예외 처리 함수를 엔티티에 삽입하려니 테이블 매핑 시 불필요한 내용들이 추가될 거 같고, DTO에 추가하려니 너무 DTO 몸집이 커진다 해야하나.. 그래서 서비스 계층에서 구현을 해야하나 고민중입니다. 그러자니 또 도메인 모델 패턴을 위반하는 거 같고..

혹시 이 경우엔 어디서 해당 로직을 구현하는 게 맞을까요?

답변 1

1

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요^^

특정 비즈니스의 검증 로직이 너무 크다면, 별도의 클래스로 분리하시면 좋습니다. 예를 들어서 XxxValidator 같은 클래스를 별도로 만드는 것이지요.

그리고 이 클래스를 서비스 계층이나 엔티티에서 호출하시면 됩니다^^

감사합니다.

Junyoung_Choi님의 프로필 이미지
Junyoung_Choi

작성한 질문수

질문하기