-
[Spring] 예제 만들기BackEnd/Spring 2022. 7. 22. 22:44
- Java 11
- IDE: IntelliJ
* 스프링 없는 순수 자바로만 개발 진행
- 스프링 부트 스타터를 이용하여 스프링 프로젝트 생성
- 비즈니스 요구사항과 설계
< 회원>
1) 회원 도메인 설계
- 회원은 가입(join)과 조회(find) 가능
- 회원은 일반(basic)과 vip 두가지 등급
- 회원 데이터는 자체 DB 구축 or 외부 시스템 연동
- 역할(interface) 과 구현(implement)으로 분리하여 설계
2) 회원 도메인 개발
- 회원 등급
- 회원 객체
3) 회원 저장소
- MemberRepository 인터페이스
: 언제든지 구현체 바꿀 수 있도록 역할이랑 구현을 잘 나눠놓자
- MemoryMemberRepository 구현 객체
4) 회원 서비스(가입, 조회)
- MemberService 인터페이스
- MemberServiceImpl 구현 객체
: 어쨌거나 MemoryMemberRepository를 수동으로 바꿔줘야하므로 역할과 구현이 잘 분리되어있진 않음
5) 회원 도메인 실행과 테스트
- JUnit Test
: 위 방법대신 @Test를 이용함
<주문과 할인>
1) 주문과 할인 도메인 설계
역할과 구현을 분리해서 설계했기 때문에 구현체를 언제든지 교체할 수 있음!
2) 주문과 할인 도메인 개발
- DiscountPolicy 할인 정책 인터페이스
- FixDiscountPolicy 할인정책 구현체
: 회원 등급이 vip면 고정 1000원 할인
- 주문 엔티티
- OrderService 주문 서비스 인터페이스
:주문 생성
- OrderServiceImpl 주문 서비스 구현체
3) 주문과 할인 정책 테스트
- class 실행
- JUnit 단위 테스트
4) 새로운 할인 정책 개발
- vip면 1000원 고정 할인이 아니라 10% 정률 할인으로 바꾸기
- 인터페이스랑 구현체를 잘 분리해뒀으니 정률 할인하는 구현체 class만 새로 생성하자
- RateDiscountPolicy implement
- 테스트 작성
문제점!!
- 할인 정책을 변경하려면 클라이언트 코드(orderserviceImpl) 을 고쳐야함
- DIP 미준수 : DiscountPolicy 인터페이스랑 implement 모두 의존하고 있음
- OCP 미준수: 기능을 확장해서 변경하면 클라이언트 코드에 영향을 줌
'BackEnd > Spring' 카테고리의 다른 글
[Spring] 싱글톤 컨테이너 (0) 2022.08.02 [Spring] 예제에 객체 지향 원리 적용해보기 (0) 2022.07.27