인프런 커뮤니티 질문&답변

박윤호님의 프로필 이미지

작성한 질문수

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

주문, 주문상품 엔티티 개발

연관관계 편의 메소드, 생성 메소드에 대해 질문드려요!!

해결된 질문

작성

·

1.5K

3

[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)

[질문 내용]
안녕하세요. 항상 강의 잘 보고 있습니다.
다름이 아니라 연관관계 편의 메소드와 생성 메소드에 관해 궁금증이 생겨 질문을 드릴려고 합니다.
Entity 필드에서 가급적이면 setter 를 지양해야 한다고 알고 있습니다. 그래서 setter 를 쓰지 않고 오직 builder 를 통해 연관관계 편의 메소드와 생성 메소드를 정의할 순 없을까 고민했습니다.
아래는 setter 를 쓰지않고 builder 만 써서 작성해본 코드입니다.

<Delivery builder>

@Builder
private Delivery(Order order, Address address, DeliveryStatus deliveryStatus) {
this.order = order;
this.address = address;
this.deliveryStatus = deliveryStatus;
}

<OrderItem builder>

@Builder
private OrderItem(Order order, Item item, int orderPrice, int orderCount) {
this.order = order;
this.item = item;
this.orderPrice = orderPrice;
this.orderCount = orderCount;
}

<Order builder & createOrder>

@Builder
private Order(Member member, Delivery delivery, List<OrderItem> orderItems, LocalDateTime orderDate, OrderStatus orderStatus) {
this.member = member;
this.delivery = delivery;
this.orderItems = orderItems;
this.orderDate = orderDate;
this.orderStatus = orderStatus;

//== 연관관계 편의 메소드(?) ==//
Delivery.builder().order(this).build();
OrderItem.builder().order(this).build();
}

//== 생성 메소드 ==//
public static Order createOrder(Member member, Delivery delivery, OrderItem... orderItems) {
return builder()
.member(member)
.delivery(delivery)
.orderItems(Arrays.asList(orderItems))
.orderDate(LocalDateTime.now())
.orderStatus(OrderStatus.ORDER)
.build();
}

위에서 보시다시피 Delivery 와 OrderItem 에서 builder 를 각각 생성했습니다. 그리고 Order 의 builder 안에 연관관계 편의 메소드(?)를 추가하고, 생성 메소드에서 builder 를 이용하여 order 를 빌드한 후 리턴을 시켜줬습니다.

혹시 이렇게 작성해도 별 문제 없을까요...??? 제 부족한 질문을 읽어주셔서 감사합니다...!

 

답변 2

0

저도 어떻게 빌더 패턴으로 작성할 수 있을까 고민이였는데..!! 감사합니다 박윤호님!! 그런데 질문 하나 있는데 Order 빌드 패턴에 Member 연관관계메소드를 안 넣은 이유를 알 수 있을까요??

0

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. 박윤호님

잘 작성하신 것 같습니다.

감사합니다.

박윤호님의 프로필 이미지
박윤호
질문자

답변 정말 감사드립니다!!!