처음으로 돌아가 정률 할인 정책으로 변경해보았다.
FixDiscountPolicy -> RateDiscountPolicy
AppConfig의 등장으로 애플리케이션이
크게 사용영역과, 객체를 생성하고 구성하는 영역으로 분리되었다.
AppConfig 코드만 고치면 가능하다!
package hello.core;
import hello.core.discount.DiscountPolicy;
import hello.core.discount.FixDiscountPolicy;
import hello.core.discount.RateDiscountPolicy;
import hello.core.member.MemberService;
import hello.core.member.MemberServiceImpl;
import hello.core.member.MemoryMemberRepository;
import hello.core.order.OrderService;
import hello.core.order.OrderServiceImpl;
public class AppConfig {
public MemberService memberService(){
return new MemberServiceImpl(memberRepository());
}
private MemoryMemberRepository memberRepository() {
return new MemoryMemberRepository();
}
public OrderService orderService(){
return new OrderServiceImpl(memberRepository(), discountPolicy());
}
public DiscountPolicy discountPolicy(){
return new RateDiscountPolicy();
}
}
discountPolicy() 함수에서
객체생성 부분만 RateDiscountPolicy으로 변경해주면 된다.
이제 사용영역의 어떠한 코드도 변경할 필요가 없고
구성영역은 당연히 변경된다. 구성역할을 담당하는 AppConfig를 공연 기획자로 생각하면
구현객체들을 모두 알아야한다.
'웹프로그래밍 > Spring 핵심 원리' 카테고리의 다른 글
15. 좋은 객체 지향 설계의 5가지 원칙의 적용 (0) | 2021.07.15 |
---|---|
14. 전체 흐름 정리 (0) | 2021.07.15 |
12. AppConfig 리팩터링 (0) | 2021.07.14 |
11. 관심사의 분리 (0) | 2021.07.13 |
10. 새로운 할인 정책 적용과 문제점 (0) | 2021.07.13 |