반응형
회원 도메인 설계
요구사항
- 회원을 가입하고 조회할 수 있다.
- 회원은 일반과 VIP 두 가지 등급이 있다.
- 회원 데이터는 자체 DB를 구축할 수 있고, 외부 시스템과 연동할 수 있다. (미확정)
회원등급
public enum Grade {
BASIC,
VIP
}
회원 엔티티
@Getter
@Setter
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;
}
}
인터페이스
public interface MemberRepository {
void save(Member member);
Member findById(Long memberId);
}
메모리 구현체
public class MemoryMemberRepository implements MemberRepository{
private static Map<Long, Member> store = new ConcurrentHashMap<>();
@Override
public void save(Member member) {
store.put(member.getId(), member);
}
@Override
public Member findById(Long memberId) {
return store.get(memberId);
}
}
서비스 인터페이스
public interface MemberService {
void join(Member member);
Member findMember(Long memberId);
}
서비스 구현체
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);
}
}
기능 테스트
public class MemberServiceTest {
MemberService memberService = new MemberServiceImpl();
@Test
void join() {
//given
Member member = new Member(1L, "memberA", Grade.VIP);
//when
memberService.join(member);
Member findMember = memberService.findMember(1L);
//then
assertThat(member).isEqualTo(findMember);
}
}
문제점
- 저장소 변경시 OCP 원칙은 ?
- DIP 원칙은?
- 인터페이스 뿐만 아니라 구현까지 모두 의존하는 문제점
728x90
반응형
'스프링' 카테고리의 다른 글
스프링 핵심 원리 - (4) (0) | 2022.08.03 |
---|---|
스프링 핵심 원리 - (3) (0) | 2022.08.03 |
스프링 핵심 원리 - (1) (0) | 2021.09.10 |
필터 / 인터셉터 / AOP (0) | 2021.06.28 |
Spring (0) | 2021.06.28 |
댓글