DTO 관리
API가 클라이언트(Client)가 보낸 Request Payload를 받을 때 RequestDto를 사용하고, 결과 값을 내려줄 때 ResponseDto를 사용합니다.
문제는 API 스펙을 고도화할수록 Dto가 너무 많아진다는 것입니다.
End-point 요청에 따라 Request Body가 다르고 Response Body도 다릅니다.
그래서 API 스펙을 많이 뽑을 수록 Dto 패키지는 아래 처럼 지저분해집니다. (이미지 길이 보니까 더 길어 보이네요..!)
Domain 분리
프로젝트가 어느정도 크기가 커지면 로직 안에서 동작하는 클래스들은 domain별로 관리하는 게 좋습니다.
domain별로 class를 정리합니다.
아까보다는 좋긴 하지만, 더 간결해질 방법이 있습니다.
Inner static class
RequestDto와 ResponseDto를 묶어서 관리할 수 있으면 편합니다.
Inner static class를 사용하면 깔끔하게 해결할 수 있습니다.
public class ProductDto {
@Getter
@AllArgsConstructor
@Builder
public static class RequestDto {
private String productNm;
private Integer price;
private String largeCatCd;
private String smallCatCd;
private Integer totalCount;
}
@Getter
@AllArgsConstructor
@Builder
public static class ResponseDto implements Serializable {
private Long id;
private String productNm;
private String titleImg;
private Integer price;
private Integer disPrice;
private Integer salePrice;
}
@Getter
@AllArgsConstructor
@Builder
public static class AdminProductResponseDto {
private Long id;
private String productNm;
private String titleImg;
private Integer price;
private Integer disPrice;
private Integer purchaseCount;
private Integer totalCount;
private Integer rateAvg;
}
}
Static function은 클래스의 객체를 생성하지 않고도 function을 사용할 수 있습니다.
Inner static class 역시 상위 클래스의 객체를 생성하지 않고 생성자를 사용할 수 있게 합니다.
훨씬 깔끔해진 dto 패키지를 볼 수 있습니다.
Dto를 Inner static class로 관리하면 응집도가 높아진다는 장점이 있습니다.
가령, 상품주문에 문제가 생겼다고 한다면, ProductOrderDto를 한 눈에 찾을 수 있어서 에너지 낭비를 줄일 수 있습니다.
감사합니다.
'Programming > Refactoring' 카테고리의 다른 글
필요한 파라미터만 사용하기! (DTO를 남용하지 말자.) (0) | 2023.05.24 |
---|---|
패키지 의존성 사이클 검사 및 개선하기! (feat. IntelliJ) (0) | 2022.12.12 |
리팩토링 - Switch문을 다형성으로 바꾸기 (0) | 2022.02.27 |
리팩토링 - 반복문 분리 (split loop) (0) | 2022.02.26 |
리팩토링 - 메소드 올리기 (Pull up method) (0) | 2022.02.20 |