AppConfig refactoring

현재·2024년 1월 27일

기존 AppConfig

package hello.core;

import hello.core.discount.FixedDiscountPolicy;
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 FixedDiscountPolicy());
    }
}
  • 중복(MemoryMemberRepository)이 있고 역할에 따른 구현이 잘 안보인다.

기대했던 그림

refactoring -> 중복을 제거하고 역할에 따른 구현이 보이도록

public class AppConfig {
    public MemberService memberService() {
        return new MemberServiceImpl(memberRepository());
    }
    
    public MemberRepository memberRepository() {
    	return new MemoryMemberRepository();
    }

    public OrderService orderService() {
        return new OrderServiceImpl(memberRepository(), discountPolicy());
    }
    
    public DiscountPolicy discountPolicy() {
    	return new FixedDiscountPolicy();
    }
}
  • new MemoryMemberRepository() 중복 제거. -> 이후 MemoryMemberRepository 변경 시 한 부분만 변경하면 된다.
  • Appconfig를 보면 역할과 구현 클래스가 한 눈에 파악 가능. -> 애플리케이션 전체 구성이 어떻게 되어있는지 빠르게 파악 가능.

0개의 댓글