refactor [#223] ArtistResolver 객체 그래프 탐색 로직을 분리하기 위해 전략(Strategy) 패턴 적용 #224
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.
✨ Issue Number ✨
closes #223
✨ To-do ✨
✨ Description ✨
문제 상황
기존 ArtistResolver 클래스는 탐색 대상 클래스의 Artist 정보를 수집하고, 조회된 정보를 주입하기 위해 단일 파일에 함수를 등록했습니다.
이로 인해 새로운 엔티티가 추가되거나 엔티티 변경사항이 생기면 ArtistResolver 파일도 수정해야하는, 변경지점이 다수 발생하는 문제가 있습니다.
[탐색 대상 클래스 등록]
![Image](https://private-user-images.githubusercontent.com/72855914/411874968-739eb969-38bb-4ece-bc89-a545f54c11ab.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk1ODQ2MTMsIm5iZiI6MTczOTU4NDMxMywicGF0aCI6Ii83Mjg1NTkxNC80MTE4NzQ5NjgtNzM5ZWI5NjktMzhiYi00ZWNlLWJjODktYTU0NWY1NGMxMWFiLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTUlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjE1VDAxNTE1M1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTk3OGVlNzAwZTU3NWZiMTc2MzBhOTI2OWEwYzA0OWZmNWRiZGQwZTUxZWI3YTNiZTczNTgyYzI1YTZiODA4ODMmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.Zv0n97XFrEMDNaA-B9xEohNpEbLWW-MiL7mVXRYHuJs)
[객체 그래프 탐색 로직 구현]
![Image](https://private-user-images.githubusercontent.com/72855914/411873768-092885c6-1bce-41bb-a3d2-d0ba5d577dfd.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk1ODQ2MTMsIm5iZiI6MTczOTU4NDMxMywicGF0aCI6Ii83Mjg1NTkxNC80MTE4NzM3NjgtMDkyODg1YzYtMWJjZS00MWJiLWEzZDItZDBiYTVkNTc3ZGZkLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTUlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjE1VDAxNTE1M1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWMxMjhhZDkzYzU3NTU0ZTAwNmEyMTk2OTI3ZmJiMTUwZTIwOTUzNzgxODAxZjc0ZWQ2NTk5ZThjODQ0MTdmNDImWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.xwtbV24jORGqFeA3Ktmu0m0bV6mkr8VtIq8dklSXAsE)
이를 해결하기 위해 전략(Strategy) 패턴을 사용해서 엔티티의 변경 사항이
ArtistResolver
에 영향이 가지않도록 격리시키고 탐색이 필요한 엔티티를 Registry에 등록시켜 유연성과 확장성(OCP 원칙) 향상시키고자 합니다.해결 방법
아티스트 정보를 주입받기 위해 구현해야 하는 함수를 강제한 인터페이스 입니다.
artistMapper
에 객체를 등록합니다.artistMapper
변수 관리를 위해 공통적인 함수 작성이 필요했습니다. 그래서 abstract 클래스를 작성했습니다.ArtistResolver
가 사용하는 아티스트 전략 빈 클래스입니다.주어진 타겟의 클래스를 가지고 적절한 전략을 요청합니다.
Festival 엔티티가 구현한 아티스트 전략 클래스입니다.
자신이 가지고 있는 아티스트 객체 위치를 탐색해
artistMapper
에 등록합니다.Festival 클래스 타입일 경우 supports 함수는 true를 반환합니다.
[ArtistResolver load 함수]
ArtistMapper를 지역변수로 변경한 이유는 싱글톤으로 관리되는 빈은 상태를 가지면 안되기 때문입니다. 상태를 가지면 서로 다른 스레드에서 처리하는 데이터에 서로 영향을 줄 수 있기 때문에 지역 변수로 변경했습니다.
[ArtistResolver collect 함수]
코드 변경 후에는 아티스트 전략 구현 클래스만 변경하면 Resolver 클래스를 변경하지 않아도 변경사항을 적용할 수 있게 되었습니다.