Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

refactor: 예약 도메인 관련 객체들 생성 #796

Merged
merged 14 commits into from
May 25, 2022

Conversation

sakjung
Copy link
Collaborator

@sakjung sakjung commented Mar 4, 2022

구현 기능

새로 생긴 예약 관련 클래스들

  • ReservationTime: 예약 시간에 대한 객체
  • TimeSlot: 시작~끝 시간을 나타내는 객체
  • TimeUnit: 찜꽁 서비스에서 쓰는 시간 단위 (5분, 10분, ...)

논의하고 싶은 내용

  • 위 세 클래스는 모두 @embeddable 클래스이며 ReservaitonSetting@Embedded 되어있음
  • 사실 TimeSlotReservationTime의 컴포넌트(@embeddable)로 쓰는 멋진 그림을 그렸었지만, 예약 시간은 reservation 테이블 설계 상 LocalDateTime으로 되어있기 때문에 그렇게 하지 못했음. 코드를 보면 이해할 것.
  • 시간과 관련된 검증 로직은 모두 위 객체 내부로 이전. 이제 위 객체를 활용하면 어디서든 시간 데이터가 온전한 상태임을 보장받을 수 있음.

#746 관련 리팩터링 입니다. 다른 부분에서도 추가적으로 리팩터링 진행 가능한 부분이 있을 수도있어서 Close는 하지 않겠습니다.

그리고 이 PR은 #793 이 머지된 이후에 머지되어야 합니다.
이전 PR에 얹어서 작업한거라... files changed보고 놀라지 마세요.

dusdn1702
dusdn1702 previously approved these changes Apr 27, 2022
Copy link
Collaborator

@dusdn1702 dusdn1702 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

수고하셨어영

dusdn1702
dusdn1702 previously approved these changes May 5, 2022
Copy link
Collaborator

@dusdn1702 dusdn1702 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Gooooooood

@xrabcde xrabcde mentioned this pull request May 8, 2022
4 tasks
Copy link
Collaborator

@xrabcde xrabcde left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

오우 수정이 많이 되네요 👏
테스트까지 짜느라고 고생 많으셨습니다~~~~~

Comment on lines +41 to +51
if (TimeUnit.cannotDivideByMinimumTimeUnit(startTime.getMinute())) {
throw new IllegalTimeUnitValueException(startTime.getMinute());
}

if (TimeUnit.cannotDivideByMinimumTimeUnit(endTime.getMinute())) {
throw new IllegalTimeUnitValueException(endTime.getMinute());
}
}

public boolean isNotDivisibleBy(final TimeUnit timeUnit) {
return !(timeUnit.canDivide(startTime) && timeUnit.canDivide(endTime));
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이거 왜 어디서는 cannotDivideBy 를 쓰고 어디서는 isNotDivisibleBy 를 쓰는건가유...
통일하면 좋겠는걸~..~

Copy link
Collaborator Author

@sakjung sakjung May 17, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

말한대로 참 애매한 부분이긴해서...
더군다나 cannotDivideByMinimumTimeUnit가 static method라서 더 이상하게 보였을 수 있겠네요.
저는 나름 아래와 같은 기준으로 나눠서 작명을 했습니다.

# 호출자 기준 능동적인 상황이냐 수동적인 상황이냐가 기준
# 능동은 cannot*, 수동은 is*

# 받는 parameter가 나눔의 대상 (능동)
e.g. TimeUnit.cannotDivideByMinimumTimeUnit(minutes)
즉, TimeUnit 입장에서 MINIMUM_TIME_UNIT으로 minutes를 나눴을 때, 나누어 떨어지는가?

# 받는 parameter가 나눔의 주체 (수동)
e.g. timeSlot.isNotDivisibleBy(timeUnit)
즉, timeSlot이 timeUnit으로 나누어 떨어지는가?

이렇게라도 구분하지않으면, 시간 관련 메서드명이 규칙없이 더 혼란스러워 질 것 같아서 나름 구분해서 작명했습니다.
혹시 더 좋은 방안이 있다면 제안 해주세요 ㅠ

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ㅋㅋㅋㅋㅋ 안그래도 빡센 타임존에 네이밍까지 고민하시느라 고생이 많았네유...
나름의 기준이 있었군요 ㅋㅋㅋ 이렇게 의도하신 바를 공유만 잘 해주신다면 저는 상관없습니다아ㅏㅏ~~

sakjung added 2 commits May 17, 2022 21:56
cache ConcurrentHashMap, code reformatting & refactoring
Copy link
Collaborator

@xrabcde xrabcde left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

고생많으셨습니다~~

Comment on lines +41 to +51
if (TimeUnit.cannotDivideByMinimumTimeUnit(startTime.getMinute())) {
throw new IllegalTimeUnitValueException(startTime.getMinute());
}

if (TimeUnit.cannotDivideByMinimumTimeUnit(endTime.getMinute())) {
throw new IllegalTimeUnitValueException(endTime.getMinute());
}
}

public boolean isNotDivisibleBy(final TimeUnit timeUnit) {
return !(timeUnit.canDivide(startTime) && timeUnit.canDivide(endTime));
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ㅋㅋㅋㅋㅋ 안그래도 빡센 타임존에 네이밍까지 고민하시느라 고생이 많았네유...
나름의 기준이 있었군요 ㅋㅋㅋ 이렇게 의도하신 바를 공유만 잘 해주신다면 저는 상관없습니다아ㅏㅏ~~

Copy link
Collaborator

@dusdn1702 dusdn1702 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

수고했~~~따

@xrabcde xrabcde merged commit be9d86a into dev May 25, 2022
@xrabcde xrabcde deleted the feat/746-object-validation branch May 25, 2022 10:49
@xrabcde xrabcde mentioned this pull request Aug 28, 2022
4 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants