상품 엔티티 개발(비즈니스 로직 추가)
@Entity
@Getter
@Setter
@DiscriminatorColumn(name = "dtype")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
public abstract class Item {
@Id
@Column(name = "item_id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private int price;
private int stockQuantity;
@ManyToMany(mappedBy = "items")
private List<Category> categories = new ArrayList<>();
//==비즈니스 로직==//
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;
}
}
비즈니스 로직 부분을 살펴보자.
보통 도메인 주도 설계라고 할 때 엔티티 자체가 해결할 수 있는 것들은 주로 엔티티 안에 비즈니스 로직을 넣어 해결하는 게 좋다. 예를 들어 stockQuantity는 Item 엔티티 안에 있다. 그러면 이 데이터를 가지고 있는 엔티티에서 직접 처리하는 게 높은 응집도를 가질 수 있다. 또한 setter을 사용하여 데이터를 수정하는 게 아니라 비즈니스 메서드를 가지고 변경하는 게 좋다. 위와 같이 비즈니스 로직을 사용하면 좀 더 객체지향적으로 개발을 할 수 있다.
'JPA > JPA 활용 1' 카테고리의 다른 글
7. 웹 계층 개발 (0) | 2024.08.22 |
---|---|
6. 주문 도메인 개발 (0) | 2024.08.21 |
4. 회원 도메인 개발 (0) | 2024.08.20 |
2. 도메인 분석 설계 (0) | 2024.08.20 |
1. 프로젝트 환경설정 (0) | 2024.08.20 |