비즈니스 요구사항과 설계
회원
- 회원을 가입하고 조회할 수 있다.
- 회원은 일반과 VIP 두 가지 등급이 있다.
- 회원 데이터는 자체 DB를 구축할 수 있고, 외부 시스템과 연동할 수 있다. (미확정)
주문과 할인 정책
- 회원은 상품을 주문할 수 있다.
- 회원 등급에 따라 할인 정책을 적용할 수 있다.
- 할인 정책은 모든 VIP는 1000원을 할인해주는 고정 금액 할인을 적용해달라. (나중에 변경될 수 있다.)
- 할인 정책은 변경 가능성이 높다. 회사의 기본 할인 정책을 아직 정하지 못했고, 오픈 직전까지 고민을 미루고 싶다. 최악의 경우 할인을 적용하지 않을 수도 있다. (미확정)
요구사항을 보면 회원 데이터, 할인 정책과 같은 부분은 지금 정하기 어렵다. 그렇다고 이러한 정책이 결정될 때 까지 무기한 기다릴 수 없다.
인터페이스를 만들고 구현체를 언제든지 갈아끼울 수 있도록 설계해보자.
회원 도메인 설계
회원 도메인 요구 사항
- 회원을 가입하고 조회할 수 있다.
- 회원은 일반과 VIP 두 가지 등급이 있다.
- 회원 데이터는 자체 DB를 구축할 수 있고, 외부 시스템과 연동할 수 있다. (미확정)
- 도메인 협력 관계: 기획자들도 볼 수 있는 그림
- 클래스 다이어그램: 개발자들이 그리는 그림, 실제 서버를 실행하지 않고 클래스들을 볼 수 있는 그림
- MemoryMemberRepository를 넣을지 등은 서버가 뜨고 동적으로 결정되는 것이므로 클래스 다이어그램만으로 판단하기 어렵다.
- 회원 서비스: MemberServiceImpl
- 클라이언트가 실제 사용하는, 실제 New한 인스턴스끼리의 참조
회원 도메인 설계의 문제점
- 의존관계가 인터페이스 뿐만 아니라 구현까지 모두 의존하는 문제점이 있음
- MemberServiceImpl가 인터페이스를 의존하면서 할당하는 부분까지 의존
- 추상화에도 의존하면서 구체화에도 의존 -> DIP 위반 -> 변경 시 문제가 됨
주문과 할인 도메인 설계
역할과 구현을 분리하여 자유롭게 구현 객체를 조립할 수 있다. 회원 저장소, 할인 정책도 유연하게 변경할 수 있다.
위 소스코드는 아래 참고
출처: 김영한, 스프링 핵심 원리 - 기본편
'Spring Boot' 카테고리의 다른 글
Spring Boot 예제 2 - 객체 지향 원리 적용 (2) (0) | 2021.07.12 |
---|---|
Spring Boot 예제 2 - 객체 지향 원리 적용 (1) (0) | 2021.06.22 |
DTO, VO, DAO 정리 (0) | 2021.06.14 |
좋은 객체지향 설계의 5가지 원칙 SOLID & Spring (0) | 2021.06.08 |
객체 지향 설계와 Spring boot (0) | 2021.06.07 |