비지니스 요구사항과 설계


회원 도메인 협력 관계 : 기획자들도 볼 수 있다.
회원클래스다이어그램 (정적): 회원 도메인 협력 관계를 분석해서 만든것
회원 클래스 다이어그램은 서버를 실행하지 않고 클래스들만 분석해서 볼 수 있는 그림
db 구현체를 넣을지 외부 구현체를 넣을지 결정하는건 동적으로 결정하기 때문에 클래스다이어그램으로 판단하기 어려움
그래서 객체 다이어그램(동적)을 만든다
빌드하면 main에 대한 코드만 나가고 test 코드는 빌드될때 빠진다.
회원 도메인 실행과 테스트
순수 자바 코드로 테스트하기
public class MemberApp {
public static void main(String[] args) {
MemberService memberService = new MemberServiceImpl();
Member member = new Member(1L, "memberA", Grade.VIP);
memberService.join(member);
Member findMember = memberService.findMember(1L);
System.out.println("findMember = " + member.getName());
System.out.println("findMember = " + findMember.getName());
}
}
MemberServiceTest Junit으로 테스트
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 : 이렇게 된다
Assertions.assertThat(member).isEqualTo(findMember);
}
}
public class MemberServiceImpl implements MemberService{
private final MemberRepository memberRepository = new MemoryMemberRepository();
}
이 코드의 문제는 멤버서비스가 멤버리포지토리(인터페이스)에도 의존하고 메모리멤버리포지토리(구현체)에도 의존하고 있다. DIP 위반
주문과 할인 도메인 설계

회원을 메모리에서 조회하고, 정액 할인 정책(고정 금액)을 지원해도 주문 서비스를 변경하지 않아도 된다. 역할들의 협력 관계를 그대로 재사용 할 수 있다.
즉 메모리회원 저장소를 db멤버리포지토리로 바꿔도, 정액 할인정책을 정률할인정책으로 바꿔도 주문 서비스 구현체가 바뀌지 않는다
주문과 할인 도메인 개발
public class OrderServiceIml implements OrderService {
private final MemberRepository memberRepository = new MemoryMemberRepository();
private final DiscountPolicy discountPolicy = new FixDiscountPolicy();
@Override
public Order createOrder(Long memberId, String itemName, int itemPrice) {
Member member = memberRepository.findById(memberId);
int discountPrice = discountPolicy.discount(member, itemPrice);
return new Order(memberId, itemName, itemPrice, discountPrice); //최종 생성된 주문 반환
}
}
createOrder를 보면 멤버 가져오고 나서 discountPolicy 한테 멤버랑 아이템 가격 보낼테니 알아서 하고 결과만 던져달라고 하는 코드인데 단일책임원칙을 잘 지킨 코드다.
'Springboot' 카테고리의 다른 글
| 스프링 핵심 원리-기본편 섹션 3. 스프링 핵심 원리 이해2 정리 (0) | 2024.03.22 |
|---|---|
| 스프링 핵심 원리-기본편 섹션 1. 객체 지향 설계와 스프링 정리 (0) | 2024.03.15 |
| 김영한 스프링 입문 섹션 7. AOP 정리 (0) | 2024.03.10 |
| 김영한 스프링 입문 섹션 6.스프링 DB 접근 기술 정리 (0) | 2024.03.09 |
| 김영한 스프링 입문 섹션 5.회원 관리 예제-웹 MVC 개발 정리 (0) | 2024.03.08 |