[질문 템플릿]
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 를 빌드한 후 리턴을 시켜줬습니다.
혹시 이렇게 작성해도 별 문제 없을까요...??? 제 부족한 질문을 읽어주셔서 감사합니다...!
답변 정말 감사드립니다!!!