[레거시 코드 리팩터링 - 3단계] 현구막(최현구) 미션 제출합니다. #197
Closed
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
술샘! 조영호님 강의 3회독하고 삘받아서 줄기차게 리팩토링 해봤습니다!!
리팩토링 진행하면서 진짜 고민이 많았던거 같아요.
1. Validator 클래스 사용
처음에는 아래 그림과 같이 패키지를 나누고,
Validator
클래스를 만드려하지 않았어요.2단계에서처럼 여전히 비즈니스로직 책임을 가진 객체가 검증도 진행하는게 올바른거 같았어요.
그런데 패키지를 나누어도 결국 다른 패키지의 Repository 조회 때문에 계속 의존성이 유지되더라구요.
특히 비즈니스 로직은 어떻게든 의존성을 분리할 수 있었지만, 검증로직은 대놓고 다른 패키지의 Repository 의존을 필요로 했어요.
그제서야 조영호님 영상 속
Validator
클래스의 의의가 이해가 되더라구요."검증 로직만큼은 어쩔 수 없이 다른 패키지의 Repository를 의존하고, 비즈니스 로직만이라도 의존성을 분리한다!" 였던거 같아요.
2. 패키지 내부 양방향 연관관계 매핑, Table 패키지 통합
Validator 클래스를 이해하고 패키지 분리 및 리팩토링을 진행하니까 아래와 같아졌어요.
우선 패키지 내부의 엔티티끼리는 양방향 매핑을 진행했는데요, 패키지로 나누어진 엔티티간 의존도를 최대한 끊는 만큼
반대로 '패키지 내부의 엔티티끼리는 의존도를 갖고 있다는 걸 인정하는거 아닌가?' 라는 생각도 들었고,
이전에 술샘의 피드백이 생각나서 양방향 매핑을 사용해봤어요!!
그리고
OrderTable
과TableGroup
이 하나의 패키지로 묶였는데요,처음엔
OrderTable
과TableGroup
의 생명주기가 다르다는 이유로 둘을 나누었는데,TableGroupService
의 모든 로직이OrderTable
에 의존하더라구요.모든 로직이 의존한다는 건 사실 하나의 엔티티로 봐야하는거 아닐까 싶기도 해서, 패키지를 묶어버렸습니다.
여기서도 내부에 양방향 매핑을 진행할까 했는데,
OrderTable
이TableGroup
을 크게 필요로 하는 경우가 없어서양방향 매핑은 진행하지 않았고, 서로 조금 소원한 상태(?)로 놔두어 보았어요 😅
3. 이벤트 핸들러 사용
지금 다시 문제 지문을 읽어봐도 도저히 이해가 안가서요...
거짓말 안하고 20번은 읽어본거 같은데 도저히 지분이 이해가 안돼서, 다른 크루들은 어떻게 해석했나 코드를 살펴봤는데
여전히 잘 모르겠더라구요...
우선은 사용해본 것에 의의를 두기로 했고, 다시 지문이 이해되면 이벤트 핸들러가 사용된 부분 테스트 코드를 완성할 생각에
TODO 주석을 남겨두었습니다!!
이번 리뷰도 잘 부탁드림돠!!!!!!!!!!!! 술샘 화이팅!!!!!!!!!!!!!!!!