728x90
@Entity
@Getter
@Setter
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)//하나의 테이블에 다 넣는다
@DiscriminatorColumn(name = "dtype")//구분자를 넣어준다.
public abstract class Item {//상속하는 애들을 만들어주어야 한다.
//전략을 부모에서 정해야 된다.
@Id
@GeneratedValue
@Column(name = "item_id")
private Long id;
private String name;
private int price;
private int stockQuantity;
@ManyToMany(mappedBy = "items")
private List<Category> categories = new ArrayList<>();
//== 비즈니스 로직 ==/
//데이터를 가지고 있는 곳에서 데이터를 수정하는것이 가장 응집도가 높다
//Setter를 통해서 값을 가지고 나와 수정하고 로직을 완성하는것이 아닌 엔티티 자체에서 값을 변경하는 로직이 있는것이 가장 좋다.
/**
* Stock 증가
*/
public void addStock(int quantity){
this.stockQuantity += quantity;//재고 수량
}
/**
* Stock 감소
*/
public void removeStock(int quantity){
int restStock = this.stockQuantity - quantity;
if(restStock < 0){
throw new NotEnoughStockException("need more stock");
//0보다 재고가 적을경우 발생하는 Custom 에러
}
this.stockQuantity = restStock;
}
}
- Entity의 속성 값을 변경하는 비즈니스 로직 같은 경우 Entity 내부에 함수가 있는 것이 가장 객체지향적인 설계이다.
- Getter, Setter를 사용해서 Entity를 불러다, 값을 변경하고 세팅하는 것은 객체지향 적으로 좋지 않은 설계이므로 Entity 내부에서 해당 메서드를 통해서만 값을 변경할 수 있도록 비즈니스 로직을 Entity안에 설계하였다.
- addStock 메소드
- 재고의 값을 증가시킨다.
- removeStock 메서드
- 재고를 감소시키는데, 감소시키는 재고의 값이 0보다 작으면 안 되므로 0보다 작으면 NotEnoughStockException을 발생시킨다.

- UncheckedException으로 커스텀 에러를 생성한다.
728x90
'실전! 스프링 부트와 JPA 활용1(웹 애플리케이션 개발)' 카테고리의 다른 글
| Ch05. 상품 도메인 개발 - 상품 Service 개발 (0) | 2021.12.05 |
|---|---|
| Ch05. 상품 도메인 개발 - 상품 Repository 개발 (0) | 2021.12.05 |
| Ch04. 회원 도메인 개발 - 회원 기능 테스트 (0) | 2021.12.05 |
| Ch04. 회원 도메인 개발 - 회원 Service 개발 (0) | 2021.12.05 |
| Ch04. 회원 도메인 개발 - 회원 Repository 개발 (0) | 2021.12.05 |