JPA응용2 섹션5
상품 도메인 개발
Entity 내부 비즈니스로직 생성
Entity 도메인의 로직은 Entity클래스에 집어넣는것이 객체지향적으로 좋은 코드
Item Entity클래스를 예시로 들자면 stockQuantity를 조절하기위해 다른 클래스에서 Setter를 이용하기보다 내부로직을 생성
@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "dtype")
public abstract class Item {
private int stockQuantity;
//==비즈니스 로직==//
//재고 수량 증가로직
public void addStock(int quantity){
this.stockQuantity+=quantity;
}
public void removeStock(int quantity){
int restStock = this.stockQuantity-quantity;
if(restStock<0){
throw new NotEnoughStockException("need more stock");
}
this.stockQuantity=restStock;
}
}
생성자 설정 방식
생성자 설정방식은 한가지만 하도록 막아야한다.
//주문 상품 생성
OrderItem orderItem=OrderItem.createOrderItem(item,item.getPrice(),count);
다음과 같이 생성할때 인자로 변수를 받아 생성하는 것과
OrderItem orderItem1=new OrderItem();
orderItem1.setCount();
와 같이 new 연산자를 사용해 생성하는 것은 추후에 유지 보수 설정에서 좋지 못하다.
따라서, 한 가지 방식으로 설정하는 것이 관리하기에 좋은 설계이다.
@Entity
@Getter @Setter
public class OrderItem {
...
protected OrderItem() {
}
}
다음과 같이 protected를 사용하여 new 연산 생성자를 막을 수 있다.