728x90
반응형
SonarLint라는 툴이 권장하는 방향으로 코드 리팩토링을 하면서 리팩토링 규칙들을 기록하는 글입니다! 중복되는 규칙들은 한 번만 작성하였습니다.
💡 BuildingRestController
- 하나의 파라미터만 가지는 람다이면 파라미터의 괄호를 없애라
// Noncompliant Code
(building) -> BuildingSerializer.toBuildingListResponse(building)
// Compliant Solution
building -> BuildingSerializer.toBuildingListResponse(building)
- 람다를 메소드 참조로 바꿔라
// Noncompliant Code
building -> BuildingSerializer.toBuildingListResponse(building)
// Compliant Solution
BuildingSerializer::toBuildingListResponse
- 영속 엔티티를 POJO 또는 DTO로 바꿔라
- 이 규칙은 전체 코드의 변경사항이 많아져 반영하지 않았습니다.
- 반복되는 같은 어노테이션들을 컨테이너 어노테이션으로 묶지 마라
- 스웨거 문서 관련한 어노테이션들은 파라미터, 응답 등 묶어서 보는 게 좋아보여서 반영하지 않았습니다.
// Noncompliant Code
@Parameters({
@Parameter(name = "params", description = "검색 내용", example = "영통"),
@Parameter(name = "cursorIds", description = "커서 id", example = "4314"),
@Parameter(name = "size", description = "응답 건물 개수", example = "4"),
@Parameter(name = "sort", description = "정렬 기준", example = "id,DESC"),
@Parameter(name = "pageable", hidden = true)
})
// Compliant Solution
@Parameter(name = "params", description = "검색 내용", example = "영통")
@Parameter(name = "cursorIds", description = "커서 id", example = "4314")
@Parameter(name = "size", description = "응답 건물 개수", example = "4")
@Parameter(name = "sort", description = "정렬 기준", example = "id,DESC")
@Parameter(name = "pageable", hidden = true)
- 패키지명을 정해진 정규표현식에 맞게 바꿔라
- 초기에 프로젝트 만들때 대문자로 설정한 것 때문에 걸린 것 같습니다.
💡 ImageRestController
- 불필요한 boolean 값을 없애라
// Noncompliant Code
if (uploadFile.getContentType().startsWith("image") == false) {
...
}
// Compliant Solution
if (!uploadFile.getContentType().startsWith("image")) {
...
}
- TODO 주석과 연관된 작업을 완료해라
/*
@todo: validator로 빼기
*/
- @Deprecated 어노테이션은 @deprecated 자바독 태그와 함께 사용되어야 한다
// Noncompliant Code
@Deprecated
@PostMapping("/images/thumbnail")
public ResponseEntity<ThumbnailResponseDto.ThumbnailResponseList> uploadFile(@RequestParam("images") List<MultipartFile> uploadFiles) {
...
}
// Compliant Solution
/**
* @deprecated (when, why, etc...)
*/
@Deprecated
@PostMapping("/images/thumbnail")
public ResponseEntity<ThumbnailResponseDto.ThumbnailResponseList> uploadFile(@RequestParam("images") List<MultipartFile> uploadFiles) {
...
}
- Deprecated 코드는 언젠가 지워져야 함을 잊지마라
- 해당 메소드는 더이상 사용되지 않아서 지웠습니다.
- since, forRemoval 인자를 @Deprecated 어노테이션에 추가해라
// Noncompliant Code
@Deprecated
// Compliant Solution
@Deprecated(since="4.2", forRemoval=true)
- 널포인터는 참조되지 않아야한다
- getContentType 메소드의 반환 타입이 Nullable해서 걸린 규칙입니다.
uploadFile.getContentType().startsWith("image")
💡 FavoriteRestController
- 사용하지 않는 import 구문은 삭제해라
- 해당 클래스를 코드에서 사용하지 않아 import 구문을 삭제했습니다.
// Noncompliant Code
import com.project.Project.controller.review.dto.ReviewResponseDto;
💡 MemberRestController
- 불필요하게 던지는 예외는 없애자
- 해당 메소드에서 ServletException은 던지는 경우가 없어서 해당 예외를 지웠습니다.
// Noncompliant Code
@DeleteMapping("/member/exit")
public void exitMember(@AuthUser Member loginMember, HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
...
}
// Compliant Solution
@DeleteMapping("/member/exit")
public void exitMember(@AuthUser Member loginMember, HttpServletRequest request, HttpServletResponse response) throws IOException {
...
}
💡 ReviewRestController
- 주석처리된 코드 블럭은 삭제해라
- 사용하지 않는 코드가 주석처리 되어있어서 삭제했습니다.
// Noncompliant Code
// private List<ReviewResponseDto.ReviewDto> sliceReviewList(List<ReviewResponseDto.ReviewDto> originReviewList, ReviewResponseDto.ReviewExposeState exposeState) {
// switch (exposeState) {
// case NONE:
// return new ArrayList<>();
//
// case ONE:
// return originReviewList.subList(0, 1);
//
// case ONLY_READ:
// List<Long> reviewReadIds = this.reviewService.getReadReviews(member.getId(), buildingId).stream().map(reviewRead -> reviewRead.getReview().getId()).collect(Collectors.toList());
// List<ReviewResponseDto.ReviewDto> reviewResponseList = originReviewList.stream().filter(originReview -> reviewReadIds.contains(originReview.getReviewBaseDto().getReviewId())).collect(Collectors.toList());
// return reviewResponseList;
// case ALL:
// return originReviewList;
// }
// return originReviewList;
// }
- if-then-else 구문 대신 한 줄의 return 문을 사용해라
// Noncompliant Code
if (reviewWriteCount > 0) return false;
return true;
// Compliant Solution
return reviewWriteCount <= 0;
728x90
반응형
'💻 Service > E-ROOM' 카테고리의 다른 글
Refactoring with SonarLint - Repository (0) | 2023.07.11 |
---|---|
Refactoring with SonarLint - Service (0) | 2023.07.10 |