처음으로 돌아가 정률 할인 정책으로 변경해보았다.

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를 공연 기획자로 생각하면

구현객체들을 모두 알아야한다.

+ Recent posts