less than 1 minute read

상품 도메인 개발

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 연산 생성자를 막을 수 있다.

Updated: