OCP 개방 폐쇄 원칙
컴파일타임 의존성을 고정시키고 런타임 의존성을 변경하라. 그러기 위해 추상화에 의존하라
기존에 clent는 movie를 생성하면서 사용하였다.
public class Client {
public Money getAvatarFee() {
Movie avatar = new Movie("아바타", Duration.ofMinutes(120), Money.wons(10000), new AmountDiscountPolicy());
return avartar.getFee();
}
}
객체 생성과 관련된 책임만 전담하는 별도의 객체를 추가하고 Client는 이 객체를 사용하도록 만들 수 있다.
public class Factory {
public Movie createAvartarMovie() {
return new Movie("아바타", Duration.ofMinutes(120), Money.wons(10000), new AmountDiscountPolicy());
}
}
public class Client {
private Factory factory;
public Client(Factory factory) {
this.factory = factory;
}
public Money getAvatarFee() {
Movie avatar = factory.createAvartarMovie();
return avartar.getFee();
}
}
어떤 행동을 추가하려고 하는데 이 행동을 책임질 마땅한 도메인 개면이 존재하지 않는다면 PURE FABRICATION을 추가하고 이 객체에게 책임을 할당하라.