이제 주문 도메인을 개발해볼 거다.

<Order>
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 void setItemName(String itemName) {
this.itemName = itemName;
}
public int getItemPrice() {
return itemPrice;
}
public void setItemPrice(int itemPrice) {
this.itemPrice = itemPrice;
}
public int getDiscountPrice() {
return discountPrice;
}
public void setDiscountPrice(int discountPrice) {
this.discountPrice = discountPrice;
}
@Override
public String toString() {
return "Order{" +
"memberId=" + memberId +
", itemName='" + itemName + '\'' +
", itemPrice=" + itemPrice +
", discountPrice=" + discountPrice +
'}';
}
}
<OrderService> - 인터페이스
package hello.core.order;
public interface OrderService {
Order createOrder(Long memberId, String itemName, int itemPrice);
}
<OrderServiceImpl>
package hello.core.order;
import hello.core.discount.DiscountPolicy;
import hello.core.discount.FixDiscountPolicy;
import hello.core.member.Member;
import hello.core.member.MemberRepository;
import hello.core.member.MemoryMemberRepository;
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);
}
}
<OrderApp>
package hello.core;
import hello.core.member.Grade;
import hello.core.member.Member;
import hello.core.member.MemberService;
import hello.core.member.MemberServiceImpl;
import hello.core.order.Order;
import hello.core.order.OrderService;
import hello.core.order.OrderServiceImpl;
public class OrderApp {
public static void main(String[] args) {
MemberService memberService = new MemberServiceImpl();
OrderService orderService = new OrderServiceImpl();
Long memberId=1L;
Member member = new Member(memberId, "memberA", Grade.VIP);
memberService.join(member);
Order order=orderService.createOrder(memberId,"itemA",10000);
System.out.println("order = "+order);
}
}
그리고 실행해줄 건데 실행코드는 test 밑에 넣어주면 된다.

주문 도메인 개발 - OrderServiceTest
package hello.core.order;
import hello.core.member.Grade;
import hello.core.member.Member;
import hello.core.member.MemberService;
import hello.core.member.MemberServiceImpl;
import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
public class OrderServiceTest {
MemberService memberService = new MemberServiceImpl();
OrderService orderService = new OrderServiceImpl();
@Test
void createOrder(){
Long memberId=1L;
Member member=new Member(memberId,"memberA", Grade.VIP);
memberService.join(member);
Order order=orderService.createOrder(memberId,"itemA",10000);
Assertions.assertThat(order.getDiscountPrice()).isEqualTo(1000);
}
}
'백엔드 > 스프링' 카테고리의 다른 글
[Inflearn] 새로운 할인 정책 적용의 문제점 & 해결방안(관심사 분리) (SRP 만족) (0) | 2025.02.07 |
---|---|
[Inflearn] 새로운 할인 정책 개발 (0) | 2025.02.02 |
[Inflearn] 주문과 할인 도메인 설계 (0) | 2025.01.30 |
[Inflearn] 회원 도메인 개발 (0) | 2025.01.29 |
[Inflearn] 회원 도메인 설계 (0) | 2025.01.29 |