-
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
[#12] 동네 인증 도메인, 유즈케이스 구현 및 테스트 코드 작성 #15
Conversation
- 다양한 거리 계산 방법에 대응할 수 있도록 'DistanceCalculator' 인터페이스 도입 - 'Neighborhood'가 자신의 범위를 확인할 수 있도록 비즈니스 로직을 내부에 포함 - 동네가 없거나 범위 밖인 경우를 처리하기 위해 커스텀 예외 생성
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.
해당 프로젝트에 lombok 이 등록 안되어 있어요.
rebase 를 lombok 이 포함 된 브랜치로 진행 한 뒤 Lombok 브렌치가 main 으로 머지 되면 그 때 다시 main 으로 리베이스 해 주세요
src/main/java/com/srltas/runtogether/domain/model/neighborhood/Neighborhood.java
Show resolved
Hide resolved
src/main/java/com/srltas/runtogether/domain/model/neighborhood/Neighborhood.java
Outdated
Show resolved
Hide resolved
src/test/java/com/srltas/runtogether/application/NeighborhoodVerificationServiceTest.java
Outdated
Show resolved
Hide resolved
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.
패키지 구조나 클래스들의 위치에 대해서 궁금한 것이 있습니다.
두 위치 간의 거리를 계산하는 인터페이스(DistanceCalculator)는 Location 도메인과 밀접하게 관련되어 있다고 생각하여 domain.model.location
패키지에 생성 했습니다. 해당 인터페이스에 대한 구현체는 언제든 구현 방법이 변경될 수 있고, 외부 API를 사용할 가능성도 있다고 생각해 현재는 adapter.out
패키지에 위치 시켰습니다.
하지만 이 구현체는 Location 도메인 내에서만 사용되며, 애플리케이션에서 사용될 가능성은 낮다고 생각합니다. 이 때문에, 해당 구현체의 패키지를 domain.service.location
으로 옮겨 도메인과 관련된 기능을 한 곳에 모아두는 것이 더 나을지 고민이 됩니다. 멘토님께서는 이 부분에 대해 어떻게 생각하시는지 궁금합니다.
src/main/java/com/srltas/runtogether/domain/model/neighborhood/Neighborhood.java
Show resolved
Hide resolved
src/main/java/com/srltas/runtogether/domain/model/neighborhood/Neighborhood.java
Outdated
Show resolved
Hide resolved
src/test/java/com/srltas/runtogether/application/NeighborhoodVerificationServiceTest.java
Outdated
Show resolved
Hide resolved
- Lombok의 AllArgsConstructor 어노테이션을 RequiredArgsConstructor로 변경
Nested 애노테이션을 이용해 테스트 목적에 따라 분리
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.
전체적으로 모킹해서 테스트도 잘 작성 해 주셨네요.
쪼끔만 더 다듬어 보아요
src/main/java/com/srltas/runtogether/application/NeighborhoodVerificationService.java
Outdated
Show resolved
Hide resolved
...in/java/com/srltas/runtogether/domain/model/neighborhood/VerifiedNeighborhoodRepository.java
Outdated
Show resolved
Hide resolved
이거 답변 늦었죠;; commit 만 보다가 놓쳤어요... ㅈㅅㅈㅅ 일단 저는 domain 에 있어야 한다고 생각해요. 도메인에서도 외부 API 를 사용 할 수 있어요. 도메인은 도메인에 선언된 interface 를 호출 하는 거고 |
- 캡슐화와 코드의 응집도를 높이기 위한 수정입니다 - Neighborhood를 생성할 때 distanceCalculator를 주입 받습니다 - NeighborhoodVerificationService 유즈케이스에서 더 이상 distanceCalculator에 대해 알 필요가 없습니다
- 인증된 동네를 관리하기 위해 VerifiedNeighborhood 도메인 생성 - User와 VerifiedNeighborhood를 하나의 애그리게이트로 통합 - User 도메인 내에 verifiedNeighborhood 컬렉션을 추가하여 인증된 동네 관리
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 에서 의도한 내용들 구현 완료 된건가요???
아니라면 드래프트로 바꿔주시고 맞으면 머지 진행 해 주세요.
처음 목표 했던 동네 인증 도메인 모델, 유즈케이스, 테스트 케이스는 어느정도 구현이 되었다고 생가하여 우선 머지를 진행하도록 하겠습니다. |
📌 Summary
사용자의 위치를 기반으로 동네를 인증하고 등록하는 기능에 대한 도메인, 유즈케이스를 구현하고 테스트 코드를 만들었습니다.
📝 Description
DistanceCalculator
인터페이스를 정의하고, 이를 구현하는 방식으로 설계(
Geoapify API
를 이용할려고 했으나, 두 위치의 직선 거리 계산은 지원하지 않아Haversine
공식으로 직접 구현)Neighborhood
클래스는 사용자의 현재 위치가 동네 범위 안에 있는지 검증하고,Location
클래스는 두 위치 간의 거리를 계산하는 책임을 가짐✅ Checklist