Model & View & Controller
어플리케이션을 3가지 역할로 구분한 개발방법론
값과 기능을 가지고 있는 객체
public class Triangle {
private static final int SIZE = 3;
private static final String NAME = "삼각형";
private List<Point> points;
Triangle(List<Point> points) {
this.points = points;
}
}
모델에 포함된 데이터의 시각화
모델 객체로의 데이터 흐름을 제어
뷰와 모델의 역할을 분리
public void run() {
try {
String inputPoints = InputView.inputCoordinates();
Figure figure = FigureFactory.create(generatePoints(inputPoints));
OutputView.showCoordinatePlane(figure.getXYCoordinates());
OutputView.print(figure.getAreaInfo());
} catch(Exception e) {
System.err.println(e);
}
}
Model에서 View의 접근
Model에서 View의 역할 수행 -> 비즈니스 로직을 View에서 작성
View에서 일어나는 '과한' 값 검증과 예외처리
우아한 테코톡 피드백
값 검증을 어디서 하는 것이 좋을지는 한번 고민해보세요.
저의 경우는 InputView에서 받은 값을 Presentation Layer에서 체크를 합니다.
InputView에 입력 외의 역할을 부여하면 단일책임원칙에 위반되어, 추후에 입력 채널이 달라질 경우 유효성 체크로직도 옮겨가야 하기 때문이죠.
추가적으로 사용자의 권한, 혹은 논리적인 값(존재유무, 일치 여부) 등은 Service Layer에서 체크하구요.
값 형식은 유효하지만, 도메인 모델에서 확인해야 할 부분들은 생성자에서 체크하는게 좋다고 생각합니다. (Player의 이름은 몇자 이상이어야 한다. 이런 정책들을 말한 겁니다.)
생성자에서는 유효성 체크만 하고 다른 로직은 추가되어서는 안된다고 생각하구요.
Layer에 대한 개념들이 아직은 익숙치 않으실 수도 있겠네요. 추후 미션들을 진행하시다보면 다양한 기능들의 조합이 이루어질 때 필요한 관점들이니 이번에는 이런게 있다는 정도만 체크하고 넘어가셔도 좋겠네요.