티스토리 뷰
다음과 같은 요구 사항이 있다.
- 회원 관련
1. 회원 가입 / 조회 가능
2. 회원은 BASIC회원과 VIP 회원이 있다.
3. 회원 데이터는 자체 DB또는 외부 시스템과 연동 (미확정)
- 주문 관련
1. 회원은 상품을 주문할 수 있다.
2. 회원 등급에 따라 할인 정책 적용 가능
3. VIP 회원에게는 할인 정책에는 두 가지가 있다. (고정 할인 정책 : 1000원 DC, 비율 할인 정책 : 10%) - 고정 할인 정책을 적용, 변동 가능
회원 도메인 설계
회원 클래스 다이어그램 - 역할과 구현을 분리 (다형성)
회원 엔티티 코드와 회원 저장소(Repository)는 생략합니다.
회원 서비스
회원 서비스 인터페이스 (MemberService)
public interface MemberService {
void join(Member member);
Member findMember(Long memberId);
}
회원 서비스 구현체 (MemberServiceImpl)
public class MemberServiceImpl implements MemberService {
private final MemberRepository memberRepository = new MemoryMemberRepository();
public void join(Member member) {
memberRepository.save(member);
}
public Member findMember(Long memberId) {
return memberRepository.findById(memberId);
}
}
주문 도메인 설계
주문 엔티티 코드와 주문 저장소(Repository)는 생략합니다.
주문 클래스 다이어그램
주문 서비스
주문 서비스 인터페이스 (OrderService)
public interface OrderService {
Order createOrder(Long memberId, String itemName, int itemPrice);
}
주문 서비스 구현체 (OrderServiceImpl)
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);
}
}
우선은 메모리 회원 레포지토리와 고정 할인 정책 사용
출처: 스프링 핵심 기본 원리편
'Back-end Programming > Spring' 카테고리의 다른 글
의존관계 자동 주입 (DI: Dependency Injection) (0) | 2021.04.11 |
---|---|
컴포넌트 스캔 (Component Scan) (0) | 2021.04.10 |
싱글톤 컨테이너 (Singleton Container) (0) | 2021.04.09 |
객체 지향 원리 적용 (OOP) (0) | 2021.04.07 |
객체 지향 설계(OOP)와 스프링(Spring) (0) | 2021.04.06 |
댓글