-
Notifications
You must be signed in to change notification settings - Fork 0
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
Feat/#46 Certification 테이블 생성, 회사 인증 등록 API 구현 #53
Conversation
@Transactional(readOnly = true) | ||
public void applyIfCertifiedUser(Long userId, Consumer<? super Certification> consumer) { | ||
certificationRepository.findByUserId(userId).ifPresent(consumer); | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Command로 보아야 될지 Query로 보아야 할 지 잘 모르겠습니다.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
저는 Query로 보는게 맞다고 생각됩니다
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
수고하셨습니다.!
추가적으로 pr 올리기 전에 리베이스 과정을 한번 거쳐서 merge conflict가 나지 않게끔 올리면 더 좋을것 같습니다!
conflict가 생기면, CI 가 정상적으로 돌지 않는 이유로
@Transactional(readOnly = true) | ||
public void applyIfCertifiedUser(Long userId, Consumer<? super Certification> consumer) { | ||
certificationRepository.findByUserId(userId).ifPresent(consumer); | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
저는 Query로 보는게 맞다고 생각됩니다
수고하셨습니다~! |
이슈번호
close: #46
close: #54
작업 내용 설명
Repository 가공 클래스
순환참조 발생 상황
리뷰어에게 한마디
Repository 가공하는 역할을 가진 Layer
(package 이름을 어떻게 해야 될지 몰라 현재 cq라고 했습니다. 잘 생각이 나지 않는데 좋은 이름 추천좀 부탁드립니다.)
*아직 모든 도메인에 적용하지는 않았습니다.
순환 참조가 발생해서 Repository 가공하는 역할을 가진 Layer(라고 볼 수 있나????) 구현했습니다. 다른 도메인의 Service 참조가 아닌 해당 Layer의 참조를 하려고 하는데 어떤가요?
Transactional을 짧게 처리할 수 있고, 에러 코드를 한 곳에서 관리하고, Repository 접근은 Command와 Query로 나누고 Service는 비즈니스 로직으로 나눌 수 있어서 좋은 것 같습니다. ex) 초기 인증 서비스 이메일 인증 서비스 재인증 서비스
혹시 제가 모르는 단점이나 더 잘 사용할 수 있는 방법(~~~ 를 참고해봐라) 있으면 피드백 부탁드립니다.
추가로 아래 부분이 Command로 보아야 될지 Query로 보아야 할 지 잘 모르겠습니다.
일단 CertificationCommand에 구현해 놓았습니다.
만약 인증이 완료된 사용자라면 S3에 이미 올려져 있는 사진을 삭제하는 로직입니다.
sealed interface와 inner record 로 DTO 구현(final class와 private 기본 생성자로 대체)항상 DTO가 너무 많아지는 것 같아서 고민이 됐었는데 한 클래스에서 Request, Response를 관리 할 수 있고 API 명세를 한 눈에 볼 수 있어 좋다고 생각합니다.함께 java 17애 적용된 sealed 기능도 사용해봤습니다.사용사례가 많지 않지만, 제 생각에는 문제가 없는 것으로 생각되서 시도해봤습니다.좀 우려되는 부분은 Request와 Response가 다형성이 적용되는 부분인데요.ex)1. 부주의하게 파라미터를 EmailDto로 설정2. EmailDto.Request를 넣어야 하는 로직에 EmailDto.Response를 실수로 대입3. 에러 발생위와 같은 경우가 발생할 수 있지만, interface와는 조금 다르게 sealed interface를 사용할 때구현이 허락된 객체
가 무엇인지 아는 상태에서 사용하는 것이기 때문에 방지할 수 있다고 생각합니다.