도메인 모델 패턴
비즈니스 로직의 대부분이 엔티티에 있고, 서비스 계층은 단순히 엔티티에 필요한 요청을 위임하는 역할을 수행하는 패턴
주문 엔티티
//Order.java
//==생성 메서드==//
public static Order createOrder(Member member, Delivery delivery, OrderItem... orderItems) {
Order order = new Order();
order.setMember(member);
order.setDelivery(delivery);
for (OrderItem orderItem : orderItems) {
order.addOrderItem(orderItem);
}
order.setStatus(OrderStatus.ORDER);
order.setOrderDate(LocalDateTime.now());
return order;
}
//==비즈니스 로직==//
//주문 취고
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;
/* Java 8
return orderItems.stream()
.mapToInt(OrderItem::getTotalPrice)
.sum();
*/
}
주문 서비스
//OrderService.java
//주문
@Transactional
public Long order(Long memberId, Long itemId, int count) {
//엔티티 조회
Member member = memberRepository.findOne(memberId);
Item item = itemRepository.findOne(itemId);
//배송정보 생성
Delivery delivery = new Delivery();
delivery.setAddress(member.getAddress());
//주문상품 생성
OrderItem orderItem = OrderItem.createOrderItem(item, item.getPrice(), count);
//주문 생성
Order order = Order.createOrder(member, delivery, orderItem);
//주문 저장
orderRepository.save(order);
return order.getId();
}
//취소
@Transactional
public void cancelOrder(Long orderId) {
//주믄 엔티티 조회
Order order = orderRepository.findOne(orderId);
//주문 취소
order.cancel();
}
//검색
// public List<Order> findOrders()
}
트랜잭션 스크립트 패턴
도메인 모델 패턴과 다르게 엔티티에 비즈니스 로직이 거의 없고 서비스 계층에서 대부분의 비즈니스 로직을 처리하는 방법
※ 코드의 문맥에 따라서 적절한 패턴을 사용하면 된다. 동일한 프로젝트에서 2개의 패턴을 동시에 사용할 수도 있다.
출처
[인프런] 스프링 부트와 JPA 활용1
실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발 - 인프런 | 강의
실무에 가까운 예제로, 스프링 부트와 JPA를 활용해서 웹 애플리케이션을 설계하고 개발합니다. 이 과정을 통해 스프링 부트와 JPA를 실무에서 어떻게 활용해야 하는지 이해할 수 있습니다., - 강
www.inflearn.com
도메인 모델 패턴
https://martinfowler.com/eaaCatalog/domainModel.html
P of EAA: Domain Model
martinfowler.com
트랜잭션 스크립트 패턴
https://martinfowler.com/eaaCatalog/transactionScript.html
P of EAA: Transaction Script
| P of EAA Catalog | Transaction Script Organizes business logic by procedures where each procedure handles a single request from the presentation. For a full description see P of EAA page 110 Most business applications can be thought of as a series of tra
martinfowler.com
'WEB > Spring 인강' 카테고리의 다른 글
[Spring] 스프링 공부 #17 (0) | 2022.03.29 |
---|---|
[Spring] 스프링 공부 #16 (0) | 2022.03.29 |
[Spring] 스프링 공부 #14 (0) | 2022.02.17 |
[Spring] 스프링 공부 #13 (0) | 2022.02.09 |
[Spring] 스프링 공부 #12 (0) | 2022.02.07 |