답변:
Model
와는 View
서로 독립적입니다.
MVC 구조 Controller
의 두뇌 라고 생각하지 마십시오 . 이라고 생각 디스패처 브라우저의 요청을 처리하고 전달 받는 그들 Model
. 그런 다음 소요 된 데이터 로부터 Model
A의와 패키지를 템플릿 친화적 인 방법으로, 다음에 보냅니다 View
.
이 Model
는 IS 두뇌 MVC의 구조에서, 당신이 당신의 비즈니스 규칙을 두어야 곳이다. 비즈니스 규칙은 여러 컨트롤러에 공통 입니다. 따라서 문서 컨트롤러와 보고서 컨트롤러는 모두 사용자 모델을 사용하여 누가 그 일에 액세스 할 수 있는지 확인할 수 있습니다. 두 컨트롤러에서 이러한 규칙을 반복하지 않으려 고합니다.
이 View
아닌 데이터 소스 특정 방식으로 데이터를 표시하는 HTML 템플릿을 사용해야합니다. 데이터베이스의 스키마에 밀접하게 바인딩되어서는 안됩니다. 문서의 제목을 표시하려면 뷰 출력을라는 템플릿 변수의 내용을 가지고 것입니다 document_title
, 만은 Controller
그 변수가 설정되고, 오직이 방법을 알고 Model
그 문서는 그 제목이 이유를 알고있다.
MVC는 원래 데스크톱 응용 프로그램을 쉽게 프로그래밍 할 수 있도록 정의되었습니다. 뷰는 모델 이벤트를 구독하여 모델이 변경 될 때 프리젠 테이션을 업데이트합니다. 컨트롤러는 사용자 인터페이스 이벤트 (예 : 버튼 누름)를 모델 호출로 변환했습니다. 따라서 컨트롤러와 뷰는 모델에 따라 다르지만 서로 독립적입니다. 이 모델은 두 가지와 무관했습니다. 이를 통해 여러 뷰와 컨트롤러가 동일한 모델에서 작동 할 수있었습니다.
웹 1.0 애플리케이션 (전체 페이지 새로 고침, AJAX 없음)에 사용되는 "MVC"아키텍처는 약간 다릅니다. 웹 요청이 컨트롤러로 발송됩니다. 컨트롤러는 어떻게 든 모델 상태를 수정 한 다음 하나 이상의 모델을 보내어 뷰로 렌더링합니다. 컨트롤러와 뷰는 모두 모델에 따라 다르지만 컨트롤러도 뷰에 따라 다릅니다.
웹 2.0 애플리케이션 을 통해 클라이언트 측에서 클래식 MVC 아키텍처로 돌아갑니다 . 모델, 뷰 및 컨트롤러는 모두 클라이언트 측에 Javascript 객체로 상주합니다. 컨트롤러는 사용자 이벤트를 모델 조치로 변환합니다. 모델 조치는 서버에 AJAX 요청을 야기 할 수도 있고 그렇지 않을 수도 있습니다. 다시, 뷰는 모델 이벤트를 구독하고 이에 따라 프리젠 테이션을 업데이트합니다.
뷰는 모델의 변경 사항을 구독해야합니다. 구독이 상세하거나 (이 특정 항목에 대한 재고 변경 사항 표시) 일반 (모델이 변경됨) 할 수 있기 때문에 풍부한 구독이 가능합니다. 뷰는 변경 통지에 응답하여 모델을 질의 할 수있다. 보기는 화면에 원하는 모델 요소 세트를 표시하여 변경 알림을 처리 할 때처럼 화면을 업데이트합니다.
컨트롤러는 사용자 방향 (예 : 키보드 입력, 마우스 및 메뉴 명령)의 결과로 모델 변경 사항을 푸시해야합니다.
모델은 모델과 구독 목록을 유지 관리하고 구독을 통해 적용 가능한 변경 사항을 뷰에 알려야합니다.
또한 새로운 뷰와 컨트롤러를 생성하는 메커니즘이 필요합니다 (MVC에서는 동일한 모델에 대해 두 개 이상의 뷰를 가질 수 있어야하므로 동일한 뷰 (포인트) 또는 다른 뷰 (포인트) 일 수 있음). 논리적으로 컨트롤러가 컨트롤러 또는 다른 구성 요소의 일부일 수있는 뷰 및 컨트롤러 (페어) 팩토리를 수행하거나 액세스해야한다고 생각할 수 있습니다.
Models
통지하지 않습니다 Views
. 변경 사항을 Controllers
쿼리 한 Model
다음 Views
해당 변경 사항 을 표시 하도록 렌더링 합니다.
MVC는 모듈성 패턴과 비슷합니다. 사용자 인터페이스 레이아웃 (보기)을 변경할 때마다 응용 프로그램 논리 (컨트롤러) 또는 내부 데이터 처리 (모델)를 변경할 필요가 없습니다.
이를 달성하기 위해 패턴은 각 MVC 컴포넌트의 구현 로직을 분리하는 것입니다. 그래도 구성 요소가 서로 인터페이스를 알고있는 것은 정상입니다 .
내가 자주 본 것은 컨트롤러가 모델 및 뷰를 생성 또는 호출하고 (따라서 인터페이스를 알고 있음) 모델 또는 뷰는 컨트롤러에게 콜백 또는 관찰자 패턴과 같은 정보를 반환 할 수 있다는 것입니다. 중요한 부분은 컨트롤러가 레이아웃 구조를 인식하지 못한다는 것입니다.