본문 바로가기
Back End/Spring

spring - 회원 도메인 설계

by SolaKim 2023. 7. 6.
  • 회원 도메인 요구사항
    • 회원을 가입하고 조회할 수 있다.
    • 회원은 일반과 VIP 두 가지 등급이 있다.
    • 회원 데이터는 자체 DB를 구축할 수 있고, 외부 시스템과 연동할 수 있다. (미확정)

출처 : 김영한님의 스프링 핵심 원리 기본

회원 클래스 다이어그램 : 정적

회원 객체 다이어그램 : 동적

 

하지만 이렇게 구현했을시에 문제점들이 있다.

//MemberServiceImpl은 MemberRepository에도 의존하고 MemoryMemberRepository에도 의존함
public class MemberServiceImpl implements MemberService{

    //이부분에서 DIP 위반, 실제 할당하는 부분이 구현체를 의존함
    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);
    }
}

ㄴ 이코드를 보면 구현체인 MemberServiceImpl이 DIP를 위반함. 추상화에도 의존하고, 구체화에도 의존을 하는꼴..!

일단 주문과 할인 도메인 설계 후 이 부분에 대해서 수정해보자.

 

주문과 할인 도메인 설계

주문과 할인 정책

  • 회원은 상품을 주문할 수 있다.
  • 회원 등급에 따라 할인 정책을 적용할 수 있다.
  • 할인 정책은 모든 VIP는 1000원을 할인해주는 고정 금액 할인을 적용해달라. (나중에 변경 될 수 있
  • 다.)
  • 할인 정책은 변경 가능성이 높다. 회사의 기본 할인 정책을 아직 정하지 못했고, 오픈 직전까지 고민을
  • 미루고 싶다. 최악의 경우 할인을 적용하지 않을 수 도 있다. (미확정)

출처 : 김영한님의 스프링 핵심 원리 기본

  • 회원을 메모리가 아닌 실제 DB에서 조회하고, 정률 할인 정책(주문 금액에 따라 % 할인)을 지원해도 주문서비스를 변경하지 않아도 된다.
  • 협력 관계를 그대로 재사용 할 수 있다.