주문과 할인 도메인 개발

Sunny·2023년 3월 7일
0

✨ 스프링 핵심 원리 - 기본편


🔅 목차


✅섹션2. 스프링 핵심 원리 이해1 - 예제 만들기

#1 프로젝트 생성
#2 비즈니스 요구사항과 설계
#3 회원 도메인 설계
#4 회원 도메인 개발
#5 회원 도메인 실행과 테스트
#6 주문과 할인 도메인 설계
#7 주문과 할인 도메인 개발
#8 주문과 할인 도메인 실행과 테스트

🌱 할인 정책 인터페이스

  • 경로 : src/main/java/hello/core/discount/DiscountPolicy.java
public interface DiscountPolicy {

    /**
     * @return 할인 대상 금액
     */
    int discount(Member member, int price);
}

🌱 정액 할인 정책 구현체

  • 경로 : src/main/java/hello/core/discount/FixDiscountPolicy.java
public class FixDiscountPolicy implements DiscountPolicy {

    private int discountFixAmount = 1000; // 1000원 할인

    @Override
    public int discount(Member member, int price) {
        if(member.getGrade() == Grade.VIP) {
            return discountFixAmount;
        } else {
            return 0;
        }
    }
}

🌱 주문 엔티티

  • 경로 : src/main/java/hello/core/order/Order.java
package hello.core.order;

public class Order {
    
    private Long memberId;
    private String itemName;
    private int itemPrice;
    private int discountPrice;

    public Order(Long memberId, String itemName, int itemPrice, int discountPrice) {
        this.memberId = memberId;
        this.itemName = itemName;
        this.itemPrice = itemPrice;
        this.discountPrice = discountPrice;
    }
    
    public int calculatePrice() {
        return itemPrice - discountPrice;
    }

    public Long getMemberId() {
        return memberId;
    }

    public String getItemName() {
        return itemName;
    }

    public int getItemPrice() {
        return itemPrice;
    }

    public int getDiscountPrice() {
        return discountPrice;
    }

    @Override
    public String toString() {
        return "Order{" +
                "memberId=" + memberId +
                ", itemName='" + itemName + '\'' +
                ", itemPrice=" + itemPrice +
                ", discountPrice=" + discountPrice +
                '}';
    }
}

🌱 주문 서비스 인터페이스

  • 경로 : src/main/java/hello/core/order/OrderService.java
public interface OrderService {
    Order createOrder(Long memberId, String itemName, int itemPrice);
}

🌱 주문 서비스 구현체

  • 경로 : src/main/java/hello/core/order/OrderServiceImpl.java
public class OrderServiceImpl implements OrderService {
    
    private final MemberRepository memberRepository = new MemoryMemberRepository();
    private final DiscountPolicy discountPolicy = new FixDiscountPolicy();

    @Override
    public Order createOrder(Long memberId, String itemName, int itemPrice) {
        Member member = memberRepository.findById(memberId);
        int discountPrice = discountPolicy.discount(member, itemPrice);
        
        return new Order(memberId, itemName, itemPrice, discountPrice);
    }
}
  • 주문 생성 요청이 오면, 회원 정보를 조회하고, 할인 정책을 적용한 다음 주문, 주문 객체를 생성해서 반환한다.
  • 메모리 회원 리포지토리와 고정 금액 할인 정책을 구현체로 생성한다.
profile
개발에 재미를 붙여보기 :)

0개의 댓글