GitHub

https://github.com/Choidongjun0830

Spring

[JPA 활용 1편 복습] 회원, 상품 도메인 개발

gogi masidda 2024. 6. 28. 12:02

 

//MemberService

/**
     * 회원 전체 조회
     */
    @Transactional(readOnly = true)
    public List<Member> findMembers() {
        return memberRepository.findAll();
    }

    /**
     * 회원 하나 조회
     */
    @Transactional(readOnly = true)
    public Member findOne(Long memberId) {
        return memberRepository.findOne(memberId);
    }

조회하는 곳에서는 @Transactional(readOnly = true)로 두면 성능 최적화된다.

 

@Entity
@Getter @Setter
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<>();

    //==비즈니스 로직==//

    /**
     * 재고 수량 증가
     */
    public void addStockQuantity(int quantity) {
        this.stockQuantity += quantity;
    }

    public void removeStockQuantity(int quantity) {
        int restStock = this.stockQuantity - quantity;
        if (restStock < 0) {
            throw new NotEnoughStockException("Need More Stock");
        }
        this.stockQuantity = restStock;
    }
}

도메인 주도 설계라고 해서 엔티티 자체가 해결할 수 있는 비즈니스 로직은 엔티티 안에 넣는 것이 좋다. 

 

728x90