Algorithm Study

주문 서비스 개발 (OrderService)

hyun-1200 2022. 6. 15. 11:09

주문 서비스 : OrderService

 

1. 주문 메서드 :  order 

public Long order(Long memberId, Long itemId, int count){
...
}

주문 시 멤버id, 아이템id, 주문수량을 받아 저장한다.

  • memberId를 통해 MemberRepository.findOne으로 member 객체 반환
  • itemId를 통해 ItemRepository.findOne으로 item 객체 반환 

저장할때는 Order과 OrderItem 엔티티에 만들어두었던 createOrder / createOrderItem 메서드를 사용한다. 

  • orderItem을 먼저 만든 후, order을 만들어야한다. 


 

order 메서드 구현. 

  • 1. 엔티티 조회
  • 2. 배송정보 생성
  • 3. 주문 상품 생성
  • 4. 주문 생성
  • 5. 주문 저장 

 

2. 취소 메서드 : cancelOrder 

 

 public void cancelOrder(Long orderId){
 ...
}

 

 

취소 메서드는 비교적 간단한다.

order 엔티티에 cancel 메서드를 구현해놨기 때문에 위임만 하면 된다.

(서비스 계층은 단순히 엔티티에 필요한 요청을 위임하는 역할을 한다. => 도메인 모델 패턴 )

 

 


비즈니스 로직을 엔티티에 구현해놓았다 . - order.cancel()

서비스 계층은 단순히 엔티티에 필요한 요청을 위임하는 역할을 한다.  이처럼 엔티티가 비즈니스 로직을 가지고 객체지향의 특성을 활용하는 것을 도메인 모델 패턴이라 한다. (http://martinfowler.com/eaaCatalog/ domainModel.html)

 

반대로 엔티티에는 비즈니스 로직이 거의없고 서비스 계층에서 대부분의 비즈니스 로직을 처리하는 것을

트랜잭션 스크랩트 패턴이라 한다. (http://martinfowler.com/eaaCatalog/ transactionScript.html