상품 엔티티 개발(비즈니스 로직 추가)
구현할 기능은 다음과 같다.
상품 엔티티(도메인 자체)에 비즈니스 로직을 추가하고, 상품 리포지토리를 개발할 것임. 이후 서비스 개발로 이어진다.
먼저 상품 엔티티를 추가적으로 업그레이드 해보자. 두 가지 비즈니스 로직을 추가할 것임.
왜 도메인 자체에 로직을 추가할까? 이를 **도메인 주도 설계(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;
}
사실.. 엔티티의 필드를 변경할일이 있다면 세터를 넣는게 아니라 위처럼 엔티티전용 비즈니스 로직들을 만들어서 제공하는게 더 적절하다.
상품 리포지토리 개발