1. AppConfig 리팩터링
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 FixDiscountPolicy();
}
}
- new MemoryMemberRepository() 부분 중복 제거
- MemoryMemberRepository를 다른 구현체로 변경할 때 한 부분만 변경하면 된다.
- AppConfig 를 보면 역할과 구현 클래스가 한눈에 들어온다.
2. 새로운 구조와 할인 정책 적용
- 정액 할인 정책 정률% 할인 정책으로 변경 (AppConfig가 있는 구성 영역만 변경하면 됨, 사용 영역은 변경할 필요가 없음)
- AppConfig의 등장으로 애플리케이션이 크게 사용 영역과, 객체를 생성하고 구성(Configuration)하는 영역으로 분리
public DiscountPolicy discountPolicy() {
return new RateDiscountPolicy();
}