주문 서비스 개발

1.OrderService 클래스 생성

 

2.주문서비스에서 주문 작성

-주문서비스를 받을 때 이루어지는 정보들 작성

 

-엔티티조회

-배송정보 생성

-주문상품 생성

-주문생성

 

-주문저장

*주문저장에 대한 설명

Cascade

-이전에 order클래스에서 설정해준 Casacade.All 설정 때문에 강제로 Persist를 해준다.

-다른 곳에서도 delivery와 같은 정보를 다른 엔티티에서 참조하거나할때에 cascade를 사용해서는 안된다.

-한 사이클 내에서만 private owner개념으로 사용한다면 casacade를 사용해도 된다.

 

사진

 

정리

엔티티조회

-findOne으로 member,item 엔티티조회를 한다. 이것 때문에 의존관계를 넣었다.

 

배송정보생성

-static 생성메서드를 통해 주문상품 생성

-static 생성메서드를 통해 주문 생성

 

주문저장

-주문 저장시 cascade옵션으로 인해 delivery, orderitem과 자동으로 db persist가 된다.

정확히는, 트랜잭션이 커밋 되는 시점에 flush 가일어나면 insertdb에 들어가게 된다.

 

참고

생성로직을 다르게 작성하면(생성필드를 추가작성한다던가) 다른 스타일로 작성할 때에는 유지보수하기가 어려워진다.

그래서 다른 로직이나, 스타일로 작성하지 못하도록 OrderItem클래스에서 Constructor를 만들때에 protected를 만들어준다. jpaprotected까지 기본생성할 수 있도록 스펙상 허용한다.

 

Protected OrderItem() {

}

 

이럴 경우 OrderService클래스에서 다른 스타일로 쓸 경우 작성된 코드에 빨간밑줄이 생긴다.

 

참고2

생성메서드에서 주문생성에 대해 수정을 하도록 묵시적으로 요구할 때에 작성하는 코드

Order클래스에서 하기와 같이 작성

 

@NoArgsConstructor(access = AccessLevel.PROTECTED)

public class Order{

 

OrderService클래스에서 직접 생성할 경우에 new Order() 로 작성할 경우 빨간밑줄이 생긴다.

이와 같이 코드를 제약을 걸어주는 것이 좋은 설계와 유지보수로 끌어갈 수 있다.

 

3 .주문서비스취소 구문 작성

-취소구문작성

-취소구문에서 cancel에서 흐름은 다음으로 넘어간다.

 

1차 흐름-Order클래스

this.setStatus(OrderStatus.CANCEL);

for (OrderItem orderItem : orderItems) {

orderItem.cancel();

}

 

2차흐름-OrderItem클래스

public void cancel() {

getItem().upStock(count);

}

 

3.2.sqljpa일 때에 차이점

-jpa 장점을 설명

sql은 일일이 수작업을 해주어야 한다.

 

 

참고

jpa orm 사용시 자주 사용하는 패턴

-엔티티의 핵심 비즈니스 로직이 있고 서비스 계층은 단순히 호출(save로 위임하는 형태로 흘러간다.

 엔티티가 비즈니스로직을 가지고 객체지향의 특성을 활용하는 것을 도메인 모델 패턴이라고 한다.

 

sql 사용시 자주 사용하는 패턴

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

 트랜잭션 스크립트 패턴이라고 한다.

 

무엇이 유지보수 하기 좋은지를 고민 하여 두 개의 패턴을 사용할 것!

 

사진

 

+ Recent posts