예약 서비스 api 개발 중 제약 사항 처리에 관한 조언 부탁드립니다.

288 views
Skip to first unread message

정현지

unread,
Jun 18, 2021, 3:02:15 AM6/18/21
to Korea Spring User Group Q&A
당일 예약이 가능한 지
* 예약요청일이 해당 업체가 쉬는 날인지
예약 요청시각에 해당 업체에 예약이 없는지
* 고객이 향후 미래에 다가오는 예약이 있는지 없는지 (고객은 미래의 예약을 하나만 가질 수 있음)
* 요청 시간이 영업 오픈이전인지
* 요청 시간이 점심 시간인 지
* 요청 시간이 영업 클로즈이후인지
* 요청 시간이 현재보다 이후인지

등등의 비즈니스 상 제약 조건들을 처리하고자합니다.
또한 제약조건에서 위배될 시 맞는 에러메세지를 리턴하는 것을 목표로 하고 있습니다.
예를 들어  '당일 예약이 가능한 지' 확인 후 위배하면 -> 당일 예약이 불가능합니다. 라는 에러메세지를 리턴.

이때, 이러한 검증을 어디서 처리해주어야할 지 혼란스럽습니다.

현재 개발한 바로는 
DentalInformation.class (아래, entity 클래스) 에서 제약사항을 검증하고 에러를 리턴하고 있습니다.
그런데 엔티티에서 비즈니스로직을 수행하고 에러를 리턴하는 것은 아닐까? 하는 의문이 들었습니다.
스크린샷 2021-06-18 오후 3.53.49.png


그래서 엔티티에서는 판별만 하고, boolean 값을 리턴하게 바꾸었더니
service에 수많은 if 문들이 생기게 되었습니다.
스크린샷 2021-06-18 오후 3.59.28.png
위의 제약사항을 처리하기 위해 checkDateTimeAvailable()함수에 더 많은 if 문들이 생기게 될 것 같습니다. 각기 다른 에러메세지를 전달하기 위해서요..!

이렇게 많은 제약사항을 검증하고 다른 에러메세지를 던져야할 때 좋은 방법이 있을까요?

감사합니다.

KS K

unread,
Jun 21, 2021, 6:28:13 AM6/21/21
to ks...@googlegroups.com
도움이 될지 모르겠지만 "역할 사슬 패턴 (Chain Of Responsibility)" 방식을 이용하는게 어떨까 합니다.
참고 예제는 아래에서 확인해보시길 바랍니다.


2021년 6월 18일 (금) 오후 4:02, 정현지 <hadoo...@gmail.com>님이 작성:
--
이 메일은 Google 그룹스 'Korea Spring User Group Q&A' 그룹에 가입한 분들에게 전송되는 메시지입니다.
이 그룹에서 탈퇴하고 더 이상 이메일을 받지 않으려면 ksug+uns...@googlegroups.com에 이메일을 보내세요.
웹에서 이 토론을 보려면 https://groups.google.com/d/msgid/ksug/7ef1df95-7c4c-4738-9eef-c061902dba90n%40googlegroups.com을(를) 방문하세요.
Reply all
Reply to author
Forward
0 new messages