반응형

분류 전체보기 294

14. 새로운 할인 정책 적용과 문제점

방금 추가한 할인 정책을 적용해보자. 할인 정책을 애플리케이션에 적용해보자. 1. 할인 정책을 변경하려면 클라이언트인 OrderServiceImpl 코드를 고쳐야 한다. private final MemberRepository memberRepository = new MemoryMemberRepository(); // private final DiscountPolicy discountPolicy = new FixDiscountPolicy(); private final DiscountPolicy discountPolicy = new RateDiscountPolicy(); 2. 문제점 발견 우리는 역할과 구현을 충실하게 분리했다. → OK 다형성도 활용하고, 인터페이스와 구현 객체를 분리했다. → OK OCP..

13. 새로운 할인 정책 개발

새로운 할인 정책 개발 새로운 할인 정책을 확장해보자. 악덕 기획자: 서비스 오픈 직전에 할인 정책을 지금처럼 고정 금액 할인이 아니라 좀 더 합리적인 주문 금액당 할인하는 정률% 할인으로 변경하고 싶어요. 예를 들어서 기존 정책은 VIP가 10000원을 주문하든 20000원을 주문하든 항상 1000원을 할인했는데, 이번에 새로 나온 정책은 10%로 지정해두면 고객이 10000원 주문시 1000원을 할인해주고, 20000원 주문시에 2000원을 할인해주는 거에요! 순진 개발자: 제가 처음부터 고정 금액 할인은 아니라고 했잖아요. 악덕 기획자: 애자일 소프트웨어 개발 선언 몰라요? “계획을 따르기보다 변화에 대응하기를” 순진 개발자: … (하지만 난 유연한 설계가 가능하도록 객체지향 설계 원칙을 준수했지 ..

12. 주문과 할인 도메인 실행과 테스트

주문과 할인 정책 실행 - 할인 금액이 잘 출력되는 것을 확인할 수 있다. - 애플리케이션 로직으로 이렇게 테스트 하는 것은 좋은 방법이 아니다. JUnit 테스트를 사용하자 package hello.core; import hello.core.member.Grade; import hello.core.member.Member; import hello.core.member.MemberService; import hello.core.member.MemberServiceImpl; import hello.core.order.OrderService; import hello.core.order.OrderServiceImpl; import hello.core.order.order; public class OrderAp..

11. 주문과 할인 도메인 개발

할인 정책 인터페이스 package hello.core.discount; import hello.core.member.Member; public interface DiscountPolicy { /** * * @param member * @param price * @return 할인 대상 금액 */ int discount(Member member, int price); } 정액 할인 정책 구현체 - VIP면 1000원 할인, 아니면 할인 없음 package hello.core.discount; import hello.core.member.Grade; import hello.core.member.Member; public class FixDiscountPolicy implements DiscountPolic..

10. 주문과 할인 도메인 설계

주문과 할인 도메인 설계 주문과 할인 정책 - 회원은 상품을 주문할 수 있다. - 회원 등급에 따라 할인 정책을 적용할 수 있다. - 할인 정책은 모든 VIP는 1000원을 할인해주는 고정 금액 할인을 적용해달라. (나중에 변경 될 수있다.) - 할인 정책은 변경 가능성이 높다. 회사의 기본 할인 정책을 아직 정하지 못했고, 오픈 직전까지 고민을 미루고 싶다. - 최악의 경우 할인을 적용하지 않을 수 도 있다. (미확정) 주문 도메인 협력, 역할, 책임 1. 주문 생성: 클라이언트는 주문 서비스에 주문 생성을 요청한다. 2. 회원 조회: 할인을 위해서는 회원 등급이 필요하다. 그래서 주문 서비스는 회원 저장소에서 회원을 조회한다. 3. 할인 적용: 주문 서비스는 회원 등급에 따른 할인 여부를 할인 정책에..

9. 회원 도메인 실행과 테스트 | 회원 도메인 설계의 문제점

회원 도메인 - 회원 가입 main package hello.core; import hello.core.member.Grade; import hello.core.member.Member; import hello.core.member.MemberService; import hello.core.member.MemberServiceImpl; public class MemberApp { public static void main(String[] args){ // 순수한 JAVA 코드 MemberService memberService = new MemberServiceImpl(); Member memberA = new Member(1L, "memberA", Grade.VIP); memberService.join(..

8. 회원 도메인 개발

회원 도메인 개발 1. 회원 엔티티 회원 등급 package hello.core.member; public enum Grade { BASIC, VIP } 회원 엔티티 package hello.core.member; public class Member { private Long id; private String name; private Grade grade; // 생성자 생성 - Alt + insert public Member(Long id, String name, Grade grade) { this.id = id; this.name = name; this.grade = grade; } // getter, setter 생성 public Long getId() { return id; } public void..

6. 비지니스 요구사항과 설계

비즈니스 요구사항과 설계 회원 - 회원을 가입하고 조회할 수 있다. - 회원은 일반과 VIP 두 가지 등급이 있다. - 회원 데이터는 자체 DB를 구축할 수 있고, 외부 시스템과 연동할 수 있다. (미확정) 주문과 할인 정책 - 회원은 상품을 주문할 수 있다. - 회원 등급에 따라 할인 정책을 적용할 수 있다. - 할인 정책은 모든 VIP는 1000원을 할인해주는 고정 금액 할인을 적용해달라. (나중에 변경 될 수있다.) - 할인 정책은 변경 가능성이 높다. 회사의 기본 할인 정책을 아직 정하지 못했고, 오픈 직전까지 고민을 미루고 싶다. 최악의 경우 할인을 적용하지 않을 수 도 있다. (미확정) 요구사항을 보면 회원 데이터, 할인 정책 같은 부분은 지금 결정하기 어려운 부분이다. 그렇다고 이런 정책이 ..

5. 프로젝트 생성

인터페이스와 구현체를 나눠서 순수 자바로만 개발 해보자. 그렇게 프로젝트 세팅 할것 프로젝트 생성 사전 준비물 - Java 11 설치 - IDE: IntelliJ 또는 Eclipse 설치 - 스프링 부트 스타터 사이트로 이동해서 스프링 프로젝트 생성 https://start.spring.io 프로젝트 선택 Project: Gradle - Groovy Project Spring Boot: 2.3.x Language: Java Packaging: Jar Java: 11 Project Metadata groupId: hello artifactId: core Dependencies: 선택하지 않는다. 스프링 부트 3.0을 선택하게 되면 다음 부분을 꼭 확인해주세요. 1. Java 17 이상을 사용해야 합니다. ..

반응형