1. 비지니스 요구사항과 설계
[ 1 ] 회원
회원을 가입하고 조회할 수 있다.
회원은 일반과 VIP 두 가지 등급이 있다.
회원 데이터는 자체 DB를 구축할 수 있고, 외부 시스템과 연동할 수 있다. (미확정)
[ 2 ] 주문& 할인 정책
회원은 상품을 주문할 수 있다. 회원 등급에 따라 할인 정책을 적용할 수 있다. 할인 정책은 모든 VIP는 1000원을 할인해주는 고정 금액 할인을 적용해달라. (나중에 변경 될 수 있다.) 할인 정책은 변경 가능성이 높다. 회사의 기본 할인 정책을 아직 정하지 못했고, 오픈 직전까지 고민을 미루 고 싶다. 최악의 경우 할인을 적용하지 않을 수 도 있다. (미확정)
2. 회원 Domain
[ 1 ] 회원 Domain 설계
▷ Enum(Enumeration)
: 관련 있는 상수들의 집합
- 상수로 사용 가능, 메서드 정의 가능, 싱글톤 패턴을 구현하는데 사용
[ 2 ] 회원 Domain 개발ㅋ
Member Entity
//Grage
public enum Grade {
Basic,
Vip
}
//------------------//
//Member
public class Member {
private Long id;
private String name;
private Grade grade;
//생성자
public Member(Long id, String name, Grade grade) {
this.id = id;
this.name = name;
this.grade = grade;
}
//Getter Setter
public Long getId() {
return id;
}
public String getName() {
return name;
}
public Grade getGrade() {
return grade;
}
public void setId(Long id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
public void setGrade(Grade grade) {
this.grade = grade;
}
}
Member Repository
//MemberRepository
public interface MemberRepository {
//Member 저장하기
void save(Member member);
//Member 찾기
Member findById(Long memberId);
}
//----------------------------------
//MemoryMemberRepository
public class MemoryMemberRepository implements MemberRepository{
private static Map<Long,Member> store = new HashMap<>();
@Override
public void save(Member member) {
store.put(member.getId(), member);
}
@Override
public Member findById(Long memberId) {
return store.get(memberId);
}
}
MemberService
//MemberService.java
public interface MemberService {
void join(Member member);
Member findMember (Long memberId);
}
//---------------------------------//
//MemberServiceImpl
public class MemberServiceImpl implements MemberService{
private final MemberRepository memberRepository = new MemoryMemberRepository();
@Override
public void join(Member member) {
memberRepository.save(member);
}
@Override
public Member findMember(Long memberId) {
return memberRepository.findById(memberId);
}
}
[ 3 ] 회원 Domain Code 분석
Entity → Repo → Service → Application (Botton Up) 방식.
Member Entity
- Member entity 객체에 id, name, grade 를 가진다. grade는 하나의 객체로 설정하였고 basic/vip로 설정할 수 있다.
- 생성자(호출되면, member에 대한 id/name/grade 속성), get&setter도 넣어준다
setter/getter → request/response 로 바꿀 수 있지 않을까,,? 에 대해 고민해보자
Member Repository
- Service (가입/찾기) 에 따른 Repository를 interface로 구현해준다.
- return 값이 없는 void join / Member 객체로 return 할 findMember 객체로 구성한다.
- MemoryRepository는 key:Long / value: Member 형태로 저장되며, 객체 변수명은 store로 지정한다.
( store.put / store.get 은 java Map의 function이다)
Member Service
- Member 객체를 가입/ memberId를 받아 Member로 반환하는 function 설정
- MemberServiceImpl에서 구현한다.
- MemberServiceimpl는 MemberService를 override
- MemberRepository를 memoryRepository로 구체화 한다.
3. 주문 domain