디자인패턴 중 하나를 뜻하며 Model-View-Controller의 약자, MVC를 말합니다.
하나의 애플리케이션, 프로젝트를 구성요소로 세 가지의 역할로 나눠지는 패턴입니다.
비교적 간단한 패턴으로 구조파악과 확장을 쉽게 할 수 있습니다.
뷰와 모델의 완벽한 분리가 어렵고 앱이 커지면 컨트롤러의 코드량이 커져 유지보수 하기가 힘듭니다.
가장 큰 차이점은 컨트롤러의 역할을 나눈 것에 있습니다.
앱이 커질수록 코드가 길어지기 때문에 줄이기 위해 역할을 나눴기 때문입니다..
뷰(View)란 클라이언트 측 시술로 UI(HTML/CSS/JavaScript)를 모아둔 컨테이너를 뜻 합니다.
사용자가 볼 결과물을 생성하기 위해 모델로부터 정보를 얻어와서 보여주는 영역입니다.
뷰는 모델에만 의존하며, 컨트롤러에 의존하면 안됩니다.
뷰 내부에서는 모델과 관련된 코드(객체의 메서드)가 있을 수 있지만, 컨트롤러 관련 코드가 있으면 안 됩니다.
뷰는 모델로부터 데이터를 받는데 이때, 반드시 컨트롤러를 통해 받아야 합니다.
모델은 서비스 로직을 소화하는 자기 자신의 본분에만 충실해야 하며, 뷰는는 철저히 컨트롤러를 통해 넘겨 받은 인자만을 사용해서 모델 코드를 사용해야 합니다.
그래야 Model-View 간의 의존 관계가 생기지 않습니다.
모델과 뷰 사이에 있는 컴포넌트이다. 모델이 데이터를 어떻게 처리할지 알려주는 역할입니다.
사용자가 접근한 URL에 따라 사용자의 요청사항 파악 후 요청 데이터를 모델을 통해 데이터를 뷰에 반영, 사용자에게 알려줍니다.
컨트롤러는 모델과 뷰에 의존해도 됩니다.
애플리케이션의 정보, 데이터를 뜻 합니다.
사용자 편집하길 원하는 모든 데이터를 가지고 있어야 합니다.
변경이 일어나면, 변경 통지에 대한 처리방법을 구현해야만 합니다.
1. 모델의 속성 중 정보가 변경 된다면, 이벤트를 발생시켜 전달해야 한다.
2. 모델을 변경하도록 요청하는 이벤트를 보냈을 때, 이를 수신할 수 있는 처리 방법을 구현해야합니다.
3. 모델은 재사용 가능하야 하며 다른 인터페이스에서도 변하면 안됩니다
모델은 컨트롤러와 뷰에 의존하지 않아야 합니다. 그리고, 어떠한 경우에서도 컨트롤러에 대하서 어떤 정보도 알지 말아야 합니다.
데이터 변경이 일어났을 때, 모델에서 화면 UI를 직접 조정 -> 수정 할 수 있도록 뷰를 참조하는 내부 속성값을 가지면 안 된다는 말입니다.
모델 내부에 컨트롤러와 뷰에 관련된 코드가 절대 있으면 안됩니다.
또한, 뷰나 컨트롤러에 대하서 어떤 정보도 알지 말아야 합니다.
이거 PPT로 만드니까 엉망입니다
ex. 컨트롤러 -> 뷰 : 컨트롤러는 뷰에게 의존성을 가져도 됩니다.
해설
1. 모델을 어떠한 의존성도 가져서는 안됩니다.
2. 컨트롤러는 모델에게 의존성을 가져도 됩니다.
3. 컨트롤러는 뷰에게 의존성을 가져도 됩니다.
4. 뷰는 컨트롤러에 의존성을 가져서는 안됩니다.
5. 뷰는 모델에 의존성을 가져도 됩니다.
6. 뷰는 모델에게 데이트를 받을 때, 반드시 컨트롤러를 통해 받습니다.
그림에는 표시되지는 않았지만 추가 규칙은
뷰는 모델로부터 데이터를 받을때는 사용자마다 다르게 보여주어야 하는 데이터에 대해서만 받아야합니다.
참고 :
https://m.blog.naver.com/jhc9639/220967034588
https://cocoon1787.tistory.com/733
https://hyeon9mak.github.io/5-rules-for-MVC-pattern