AppConfig 리팩토링

생성한 AppConfig는 역할을 구분하기가 힘들었다. 리팩토링 전 중복을 제거하고, 역할에 따른 구현이 보이도록 리팩토링 필요!

package hello.core;
  import hello.core.discount.FixDiscountPolicy;
  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(new MemoryMemberRepository());
}
      public OrderService orderService() {
          return new OrderServiceImpl(
                  new MemoryMemberRepository(),
                  new FixDiscountPolicy());
} }

리팩토링 후 new MemoryRepository() 부분이 중복 제거되었다. 그리고 MemberRepository 구현체를 변경할 때는 아래 17번째 줄만 변경해주면 된다! 아래의 AppConfig를 보면 역할과 구현 클래스가 한 눈에 들어온다! 애플리케이션 전체 구성이 어떻게 되어있는지 빠르게 파악할 수 있다!

package hello.core;

import hello.core.discount.FixDiscountPolicy;
import hello.core.member.MemberRepository;
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 MemberRepository memberRepository() {
        return new MemoryMemberRepository();
    }

    public OrderService orderService() {
        return new OrderServiceImpl(memberRepository(), discountPolicy());//객체 생성하고 구현체 할당하는 것을 안에서 직접했었다.
    }

    private FixDiscountPolicy discountPolicy() {
        return new FixDiscountPolicy();
    }
}

Last updated