-
Notifications
You must be signed in to change notification settings - Fork 4
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
Chap.8 코드를 모듈화하라 #5
Comments
❐ 8.3 클래스 상속을 주의하라 저는 개인적으로 해당 주제에 과도하게 동의를 하고 있는 상황인것 같습니다. 개인적으로 가독성 측면에서도 저는 HAS-A관계인 구성이더 좋다고 생각되는데 다른 분들의 의견이 궁금합니다 ! |
❐ 8.4 클래스는 자신의 기능에만 집중해야 한다. 단일 책임 원칙(SRP)에 관한 주제라고 생각되는데 클래스 자신의 '기능'의 범위에 대해 어떻게 생각하시나요 ? 유효성 검증의 책임은 검증의 성격과 컨텍스트에 따라 매번 달라진다고 생각하지만 저는 아래와 같이 큰 기준을 세워놓은 뒤 문맥에 따라 다시 한번 고려를 하는 편입니다.
|
혹시 스프링에서 Repository에 예외 처리를 두는 거에 대해 어떻게 생각하시나요? |
우선 저는 2주차 과제 설계하면서 상속을 쓸지 말지 고민을 했습니다. 하지만 아래의 이유로 상속을 사용하지 않았습니다.
가능하다면 HAS-A 구성으로 설계하는 것이 저도 더 좋다고 생각합니다. |
저는 아래와 같은 컨벤션으로 작업을 하고 있습니다.
그러나 프로젝트의 규모, 요구 사항의 변경과 같은 외부 요인에 의해 충분히 변경될 가능성이 있다고 생각합니다! |
우선 Service layer든 Repository layer든 어디에서 처리해야 한다는 정답은 없다고 생각합니다.
JPA를 사용하는 환경이라면 Optional을 좀 더 활용하여 작업하는 것이 일관성있는 프로젝트를 유지할 수 있다고 생각했습니다.
만약 Repository에서 아래와 같이 Exception을 터트린다면, Repository layer에서 예외를 던지는 경우의 sample code @Transactional(readOnly = true)
public Member findByXxx(MemberId memberId) {
Member member = queryFactory
.selectFrom(member)
.leftJoin(...).on(...)
.where(...)
.fetchOne();
if (isNull(member)) {
throw new MemberNotFoundException();
}
return member;
} 그럼 위 로직을 호출하는 호출부는 아래와 같이 작성할 수 있을 것입니다. public void sampleMethod(...) {
Member member = memberRepository.findByXxx(memberId);
//...
} 이 경우 호출부에서는 Service layer에서 예외를 던지는 경우의 sample code @Transactional(readOnly = true)
public Optional<Member> findByXxx(MemberId memberId) {
Member member = queryFactory
.selectFrom(member)
.leftJoin(...).on(...)
.where(...)
.fetchOne();
return Optional.ofNullable(member);
} 그럼 위 로직을 호출하는 호출부는 아래와 같이 작성할 수 있을 것입니다. public void sampleMethod(...) {
Member member = memberRepository.findByXxx(...)
.orElseThrow(MemberNotFoundException::new);
} 이 경우 repository는 DB에서 데이터를 fetch해오는 한 가지 역할만 하고, 비록 호출부가 |
[Chap8. 코드를 모듈화하라]를 읽고
등을 알려주세요!
The text was updated successfully, but these errors were encountered: