API 분리
- 별도 상품종류에 대한 설정 코드를 api 로 분리하기
상품종류 선언
별도 속성에 대해 설정함.
서비스를 통해 상품종류에 대한 조회(VO)
를 DTO 로 해당 종류에 대해 조회할 수 있도록 설정함
REST CONTROLLER
@RestController("/api/board")
@RequiredArgsConstructor
@Slf4j
public class 상품API{
private final 상품서비스 상품서비스;
@GetMapping("/config/list/{bcId}")
public ResponseEntity<상품설정> 상품설정정보조회(@PathVariable("상품정보") String 상품정보, 상품설정정보DTO 상품설정정보DTO) {
상품설정 상품설정= 상품서비스.상품설정정보조회(상품설정정보DTO);
return new ResponseEntity<>(상품설정, HttpStatus.OK);
}
}
DTO
@Value
public class 상품설정정보DTO implements Serializable {
String 상품종류;
String 멀티도메인;
}
어드민과 일반 사용자를 분리해야하는 경우
- 해당 경우 인터셉터에서 별도 어드민, 일반 사용자를 분리하는 전역처리가 되어있음.
public class NoticeFilterStrategyFactory {
public static NoticeFilterStrategy getNoticeFilterStrategy(boolean isBoardManager) {
if (isBoardManager) {
return new ManagerNoticeFilterStrategy();
}
return new UserNoticeFilterStrategy();
}
}
public interface NoticeFilterStrategy {
boolean shouldShowNotice(BoardArticle boardArticle);
}
public class ManagerNoticeFilterStrategy implements NoticeFilterStrategy {
@Override
public boolean shouldShowNotice(BoardArticle boardArticle) {
return true;
}
}
public class UserNoticeFilterStrategy implements NoticeFilterStrategy {
@Override
public boolean shouldShowNotice(VO notice) {
return isWithinDisplayPeriod(notice);
}
private boolean isWithinDisplayPeriod(VO notice) {
// 표기할 VO 로직
return true;
}
}
- 전략패턴으로 OCP 를 통한 확장에 용이하게 수정하였다.
return notFilteredNotices.stream()
.filter(noticeFilterStrategy::shouldShowNotice)
.collect(Collectors.toList()); // TODO unmodifiedList 로 변경해야함 java 11 로 마이그레이션시 주의하셈
- 서비스단에서 별도 전략에 따라 필터링 방법을 다르게 정할 수 있으며, 별도 전략 수정시에도 대응가능.
- 수정불가능한 리스트로 반환해야합니다.
Uploaded by N2T
'자바 > 리팩토링' 카테고리의 다른 글
[리팩토링] 현재 코드 상황 분석하기 (0) | 2023.09.21 |
---|---|
[리팩토링] 예시 코드 일부를 분석해보기 (0) | 2023.09.21 |
[리팩토링] DTO 가 너무 분화될 것 같은 경우 어떻게 해야할까? (0) | 2023.09.21 |
[리팩토링] DTO 에서 VO 간의 전환 메서드를 편하게 사용하려면? - MapStruct (0) | 2023.09.21 |
[리팩토링] FM 메서드 → private 생성자 전략 (0) | 2023.09.21 |