
현재 AppConfig 파일엔 중복되는 인터페이스가 많다.
리팩토링을 통해서 코드를 명확하게 하자!
package hello.core;
import hello.core.Discount.RateDiscountPolicy;
import hello.core.Order.OrderService;
import hello.core.Order.OrderServiceImpl;
import hello.core.member.MemberRepository;
import hello.core.member.MemberService;
import hello.core.member.MemberServiceImpl;
import hello.core.member.MemoryMemberRepository;
public class AppConfig {
public OrderService OrderService(){
return new OrderServiceImpl(new MemoryMemberRepository(), new RateDiscountPolicy());
}
public MemberService MemberService(){
return new MemberServiceImpl(new MemoryMemberRepository());
}
}
✅ new MemoryMemberRepository() 가 중복되고 있다.
package hello.core;
import hello.core.Discount.DiscountPolicy;
import hello.core.Discount.RateDiscountPolicy;
import hello.core.Order.OrderService;
import hello.core.Order.OrderServiceImpl;
import hello.core.member.MemberRepository;
import hello.core.member.MemberService;
import hello.core.member.MemberServiceImpl;
import hello.core.member.MemoryMemberRepository;
public class AppConfig {
public OrderService orderService(){
// return new OrderServiceImpl(new MemoryMemberRepository(), new RateDiscountPolicy());
return new OrderServiceImpl(memberRepository(), discountPolicy());
}
public MemberRepository memberRepository(){
return new MemoryMemberRepository();
}
public DiscountPolicy discountPolicy(){
return new RateDiscountPolicy();
}
public MemberService memberService(){
// return new MemberServiceImpl(new MemoryMemberRepository());
return new MemberServiceImpl(memberRepository());
}
}
중복을 없애고 구현체를 쉽게 바꿀 수 있도록 코드를 수정하였다.
만약, 할인정책에서 Fixed로 바꾸고 싶을땐discountPolicy()의 리턴값만 수정하면되고,
추후에 외부 DB로 바뀔 땐memberRepository()의 리턴값만 수정하면 된다.