기존의 전략 패턴 : 2022.07.12 - [프로그래밍/JPA Project - sparta] - 카페 검색, 정렬 기능을 구현 - 전략패턴 사용
기존의 전략패턴은 사용 시 정렬 기준이 늘어날 때마다 sort폴더에 계속해서 클래스가 늘어나는 구조로 짜여 있었습니다.
예를 들면, 정렬 기준이 10개라고 가정했을 때 asc, desc로 나눠야 해 클래스가 20개가 되는 것이죠.
북마크수 순 한가지의 정렬기준을 늘렸을 뿐인데 벌써부터 클레스가 많아보입니다.
이는 전략패턴을 잘못사용하고 있음을 깨닫게 해주었고 리팩토링을 하기로 하였습니다.
이 문제를 해결하기 위해 asc와 desc만을 전략패턴에 사용하고 정렬 기준은 value로 사용하여 코드를 깔끔하게 만들기로 하였습니다.
리팩토링 한 코드
html
<select id="sorting" onchange="getCafeList()">
<option value="createdDate-desc">-선택-</option>
<option value="cafeWeekdayPrice-desc">높은 가격순</option>
<option value="cafeWeekdayPrice-asc">낮은 가격순</option>
<option value="cafeBookmarkCount-desc">인기 높은순</option>
<option value="cafeBookmarkCount-asc">인기 낮은순</option>
</select>
js
선택된 value를 split을 이용하여 key와 value 값으로 구분하여 서버로 전달해줍니다.
let sortVal = $("#sorting option:selected").val();
let sortStrategyKey = sortVal.split("-")[1];
let sortStrategyValue = sortVal.split("-")[0];
service
private final Map<String, SortStrategy> sortStrategyMap;
# key값에 따라 필요한 의존관계를 가져옴
SortStrategy sortStrategy = sortStrategyMap.get(sortStrategyKey);
Sort sort = sortStrategy.sort(sortStrategyValue);
sort class
@Component
public class Asc implements SortStrategy{
@Override
public Sort sort(String sortValue) {
return Sort.by(Sort.Direction.ASC, sortValue);
}
}
폴더 구조
깔끔해졌습니다!
복잡한 분기처리를 전략패턴을 이용하여 효율적인 코드를 구현할 수 있어 재미있는 구현 작업이었습니다.
다른 디자인 패턴들도 코드에 적용할 수 있도록 공부해볼 예정입니다.
'프로그래밍 > JPA Project - sparta' 카테고리의 다른 글
Spring Data JPA - LIKE문 (0) | 2022.08.18 |
---|---|
북마크 기능 (0) | 2022.08.17 |
SpringDataJPA정렬기능 심화! @Formula ★★★★★ (0) | 2022.07.27 |
tip. 인텔리제이 Local History 기능 (0) | 2022.07.27 |
다른 사용자의 데이터 접근 불가 처리 (0) | 2022.07.26 |