도메인 모델 패턴
- 도메인을 모든 사람이 이해하고 공유 가능하도록 단순화시킨 모델
- DDD(Domain Driven Design) 개발 방식을 따르는 패턴
- 서비스 계층에 비즈니스 로직이 거의 없고 엔티티 내부에 비즈니스 로직을 구현해 엔티티의 객체지향 활용
- 엔티티 안 비즈니스 로직이 구현되어 있어 DTO와 엔티티의 차이를 쉽게 파악 가능하지만 각 객체들의 관계를 정립해야 하며 DB 사이 매핑 관계를 더 고려해야함
도메인 모델 패턴을 적용한 코드 (김영한 실전 스프링부트와 JPA와 활용1 중 일부)
@Entity
@Table(name = "orders")
@Getter @Setter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class Order {
@Id @GeneratedValue
@Column(name = "order_id")
private Long id;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "member_id") //연관관계 주인
private Member member;
@OneToMany(mappedBy = "order", cascade = CascadeType.ALL)
private List<OrderItem> orderItems = new ArrayList<>();
@OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumn(name = "delivery_id")
private Delivery delivery;
private LocalDateTime orderDate;
@Enumerated(EnumType.STRING)
private OrderStatus status;
//==비지니스 로직==//
//cancel
public void cancel(){
if(delivery.getStatus()==DeliveryStatus.COMP){
throw new IllegalStateException("이미 배송완료된 상품은 취소가 불가능합니다.");
}
this.setStatus(OrderStatus.CANCEL);
for (OrderItem orderItem:orderItems){
orderItem.cancel();
}
}
//==조회==//
//전체주문가격 조회
public int getTotalPrice(){
int totalPrice = 0;
for (OrderItem orderItem:orderItems){
totalPrice+=orderItem.getTotalPrice();
}
return totalPrice;
}
}
트랜잭션 스크립트 패턴
- 엔티티에 비즈니스 로직이 거의 없고 Getter, Setter만 가지고 서비스 계층에서 비즈니스 로직을 처리
- 구현 방법이 쉬움
- 엔티티 설계/분석 개념이 약해져 중복 코드 발생할 수 있다는 단점
- 엔티티를 객체보다 자료구조(DTO) 개념으로 이용
'backend > springboot' 카테고리의 다른 글
Session을 사용한 로그인 구현 (0) | 2024.04.16 |
---|---|
Cookie를 사용한 로그인 구현 (0) | 2024.04.16 |
로그인 구현 방법 세팅 (0) | 2024.04.16 |
99클럽 코테 스터디 7일차 TIL - springboot 변경 감지와 병합 (0) | 2024.04.07 |
99클럽 코테 스터디 1일차 TIL - springboot 의존성 주입 (0) | 2024.04.01 |