주문 서비스 : 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)
'Algorithm Study' 카테고리의 다른 글
[프로그래머스] 전화번호목록(level.2) / 해시 / JAVA (0) | 2022.06.15 |
---|---|
주문 기능 테스트 (OrderServiceTest) (0) | 2022.06.15 |
1. 인터넷 네트워크 ( IP/ TCP, UDP/ PORT / DNS) (0) | 2022.06.14 |
[프로그래머스] 완주하지못한 선수(level.1) / 해시 / JAVA (0) | 2022.06.13 |
[프로그래머스] 가장 큰 수 ( level.2) / JAVA / 정렬(Comparator) (0) | 2022.06.10 |