학습 페이지

상품 엔티티 개발(비즈니스 로직 추가)

구현할 기능은 다음과 같다.

  1. 상품 등록
  2. 상품 목록 조회
  3. 상품 수정

상품 엔티티(도메인 자체)에 비즈니스 로직을 추가하고, 상품 리포지토리를 개발할 것임. 이후 서비스 개발로 이어진다.

먼저 상품 엔티티를 추가적으로 업그레이드 해보자. 두 가지 비즈니스 로직을 추가할 것임.

도메인 주도 설계

왜 도메인 자체에 로직을 추가할까? 이를 **도메인 주도 설계(Domain-Driven Design)**라고 한다.

엔티티 자체가 해결할 수 있는 로직은 주로 엔티티 안에 비즈니스로직을 넣는다. 예를들어 엔티티가 갖고 있는 필드를 대상으로 하는 비즈니스 로직은 그냥 엔티티 안에 넣어주는게 응집력 있다.

    //==Items 비즈니스 로직 ==//
    
    /*재고 수량 증가*/
    public void addStock(int quantity) {
        this.stockQuantity += quantity;
    }

    /*재고 수량 감소*/
    public void removeStock(int quantity) throws NotEnoughStockException {
        int restStock = this.stockQuantity - quantity;
        if(restStock < 0){
            throw new NotEnoughStockException("need more stock");
        }
        this.stockQuantity = restStock;
    }

사실.. 엔티티의 필드를 변경할일이 있다면 세터를 넣는게 아니라 위처럼 엔티티전용 비즈니스 로직들을 만들어서 제공하는게 더 적절하다.

상품 리포지토리 개발

학습 페이지