Closed pythonstrup closed 1 month ago
public class PeriodCondition implements DiscountCondition {
private DayOfWeek dayOfWeek;
private LocalTime startTime;
private LocalTime endTime;
public PeriodCondition(final DayOfWeek dayOfWeek, final LocalTime startTime,
final LocalTime endTime) {
this.dayOfWeek = dayOfWeek;
this.startTime = startTime;
this.endTime = endTime;
}
@Override
public boolean isSatisfiedBy(final Screening screening) {
return screening.getStartTime().getDayOfWeek().equals(dayOfWeek)
&& startTime.compareTo(screening.getStartTime().toLocalTime()) <= 0
&& endTime.compareTo(screening.getStartTime().toLocalTime()) >= 0;
}
}
위 코드로 제가 이해하기로는 condition의 속성값이 변하더라도, isSatisfiedBy의 인터페이스(Screening으로 요청했을 때 boolean을 반환한다)는 변하지 않고, 내부 구현만 변하게 되므로 해당 인터페이스를 사용하고 있는 곳까지 영향이 퍼지는 것을 막는 다는 점에서 캡슐화가 잘 되어있다고 생각합니다.
다만, 말씀하신데로 변경사항이 screening에 속성들에도 영향을 끼쳐서, screening의 생성을 수정해야한다면, 어쩌면 영향도가 더 커질 것 같다는 생각이 드네요.
"의존성의 방향은 안정적인 방향으로 흘러야 한다." by @YJGwon
DiscountCondition
의 속성이 변경되면isDiscountable()
에 전달되는 파라미터 또한 수정되어야 한다고 하는데요. 변경이 필요한 점은 2장의 설계 또한 마찬가지 아닌가라는 생각이 들었어요.DiscountCondition
의 구현체의 속성이 수정되면Screening
이 변경되어야 합니다.Screening
의 변수가 수정되어야 합니다. (1계층 타고 들어가야 하기 때문에 귀찮을 수도..?)