MVC 패턴 (feat: 우아한테코톡)

PPakSSam·2022년 1월 17일
0

MVC 패턴이란

Model & View & Controller
어플리케이션을 3가지 역할로 구분한 개발방법론

MVC 흐름

  1. 사용자는 원하는 기능을 처리하기 위한 모든 요청을 컨트롤러에 보낸다.
  2. 컨트롤러는 모델을 사용하고, 모델은 알맞은 비즈니스 로직을 수행한다.
  3. 컨트롤러는 사용자에게 보여줄 뷰를 선택한다.
  4. 선택된 뷰는 사용자에게 알맞는 결과 화면을 보여준다.
    이 때 사용자에게 보여줄 데이터는 컨트롤러를 통해서 전달받는다.

Model

값과 기능을 가지고 있는 객체

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;
    }
}

View

모델에 포함된 데이터의 시각화



Controller

모델 객체로의 데이터 흐름을 제어
뷰와 모델의 역할을 분리

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);
    }
}

Why MVC?

  • 각 컴포넌트의 코드 결합도를 낮추기 위해
  • 코드의 재사용성을 높이기 위해
  • 구현자들 간의 커뮤니케이션 효율성을 높이기 위해

MVC 하면서 많이 실수하는 부분들 정리

  1. Model에서 View의 접근

  2. Model에서 View의 역할 수행 -> 비즈니스 로직을 View에서 작성

  3. View에서 일어나는 '과한' 값 검증과 예외처리

우아한 테코톡 피드백

값 검증을 어디서 하는 것이 좋을지는 한번 고민해보세요.

저의 경우는 InputView에서 받은 값을 Presentation Layer에서 체크를 합니다.
InputView에 입력 외의 역할을 부여하면 단일책임원칙에 위반되어, 추후에 입력 채널이 달라질 경우 유효성 체크로직도 옮겨가야 하기 때문이죠.

추가적으로 사용자의 권한, 혹은 논리적인 값(존재유무, 일치 여부) 등은 Service Layer에서 체크하구요.
값 형식은 유효하지만, 도메인 모델에서 확인해야 할 부분들은 생성자에서 체크하는게 좋다고 생각합니다. (Player의 이름은 몇자 이상이어야 한다. 이런 정책들을 말한 겁니다.)
생성자에서는 유효성 체크만 하고 다른 로직은 추가되어서는 안된다고 생각하구요.

Layer에 대한 개념들이 아직은 익숙치 않으실 수도 있겠네요. 추후 미션들을 진행하시다보면 다양한 기능들의 조합이 이루어질 때 필요한 관점들이니 이번에는 이런게 있다는 정도만 체크하고 넘어가셔도 좋겠네요.

레퍼런스

우아한 테코톡 영상

이후 읽으면 좋은 포스트

3-tier Layered Architecture와 MVC

profile
성장에 대한 경험을 공유하고픈 자발적 경험주의자

0개의 댓글