Elice-Track-Cloud-4-HanSH / buy-gurus-back

0 stars 0 forks source link

Service 레이어의 update 관련 메서드 호출 시 궁금증이 있습니다. #21

Closed PromotezCitizen closed 3 weeks ago

PromotezCitizen commented 1 month ago

In GitLab by @HanSanghyeon on Oct 16, 2024, 10:07

1번 방식으로 적용하는 것이 좋다고는 생각하지만, 2번 방법으로도 사용할 수 있겠다고 생각되어 현업에서는 어떤 방식이 주로 사용되는지 여쭤보고싶습니다!

  1. Update별 메서드를 만들어 처리
    
    @Transactional
    public void updateInvoiceNumber(Long id, OrderUpdateRequest.Invoice request) {
    Order order = orderRepository.findById(id).orElseThrow(() -> new RuntimeException("Order not found"));
    if (order != null) {
        order.setInvoice(request);
        order.setStatus(Order.Status.SHIPPING.getStatus());
    }
    }

@Transactional public void updateStatus(Long id, OrderUpdateRequest.Status request) { Order order = orderRepository.findById(id).orElseThrow(() -> new RuntimeException("Order not found")); if (order != null) { order.setStatus(request.getStatus()); } }

@Transactional public void updateAddress(Long id, OrderUpdateRequest.Address request) { Order order = orderRepository.findById(id).orElseThrow(() -> new RuntimeException("Order not found")); if (order != null) { order.setAddress(request); } }


2. update하는 로직을 하나만 두고 내부에 if문 등으로 switch

@Transactional public void update(Long id, Object request) { Order order = orderRepository.findById(id).orElseThrow(() -> new RuntimeException("Order not found")); if (request instanceof OrderUpdateRequest.Invoice) { order.setInvoice((OrderUpdateRequest.Invoice) request); order.setStatus(Order.Status.SHIPPING.getStatus()); return; } if (request instanceof OrderUpdateRequest.Status) { order.setStatus(((OrderUpdateRequest.Status) request).getStatus()); return; } if (request instanceof OrderUpdateRequest.Address) { order.setAddress((OrderUpdateRequest.Address) request); return; } }

PromotezCitizen commented 1 month ago

In GitLab by @HanSanghyeon on Oct 16, 2024, 16:51

unassigned @HanSanghyeon

PromotezCitizen commented 1 month ago

In GitLab by @mumunuu on Oct 16, 2024, 18:21

일단 2번은 모든 if문을 평가하므로, 절대 저렇게 하지 않고 업데이트를 저렇게 한 곳에 다 모아두지도 않고 개별적으로 만듭니다..!! 😅

더티체크라는 것도 한번 알아보시고요.
업데이트를 저렇게 find하지 않고, 업데이트에 필요한 인자만 던져서 업데이트 하고, 업데이트가 됐는지 안됐는지는 affectedRow라는 용어를 검색해보세요.

@HanSanghyeon

PromotezCitizen commented 1 month ago

In GitLab by @HanSanghyeon on Oct 16, 2024, 22:21

현업에서는 2번처럼은 절대 하지 않나보군요. 예상은 했지만 확실하게 알고싶었습니다!