컨트롤러가 MVC 패턴의 뷰에 데이터를 전달해야합니까?


11

ASP.NET MVC (및 다른 웹 기반 MVC 구현)를 사용하는 경우가 많지만 이것이 결코 확실하지 않습니다. 컨트롤러와 뷰가 통신해야합니까?

물론 컨트롤러는 사용할 뷰를 선택해야하지만 컨트롤러가 뷰에 데이터를 전달해야한다는 것은 무슨 뜻입니까? 내 의견으로는,보기가 컨트롤러의 데이터를 기대하는 경우 (제어기,보기) 쌍으로 효과적으로 묶여 있습니다. 대신, 일반적으로 뷰는 모델 자체와 통신하고 컨트롤러와 독립적입니다.

올바른 접근 방법이 있습니까? 아니면 정답이없는 경우입니까? 웹과 다른 환경에서 작업 할 때 답변이 변경됩니까? ASP.NET MVC에서와 같이 강력한 형식의 뷰 개념이 있거나 없을 때 대답이 변경됩니까?


이것은 "MVC"의 "M"이 컨트롤러에서 뷰로 전달되는 데이터를 나타내는 모델 (모델)을위한 것입니다.
Jay Sullivan

답변:


7

컨트롤러는 렌더링 / 표시를 위해 뷰로 더 전달 될 데이터를 준비합니다. 또한 발행-구독 메커니즘 또는 이와 유사한 것을 통해 사용자 입력 데이터를 승인합니다. MVC에 대한 자세한 내용은 Wikipedia 또는 Martin Fowler 웹 사이트 의 첫 번째 다이어그램을 확인하십시오 .

뷰가 컨트롤러의 데이터를 기대하는 경우 (컨트롤러, 뷰) 쌍으로 효과적으로 연결됩니다.

뷰는 일반적으로 데이터를 받아들이지 만 대부분의 MVC 프레임 워크에서는 특정 컨트롤러에 의존하지 않습니다. 예를 들어 JavaServer Faces 제품군은 예외입니다. 일반적으로 Rails, Django 또는 Spring MVC와 같은 프레임 워크를 사용하면 데이터 (컨텍스트, 일반적으로 맵 / 사전 / 가방)를 뷰 (뷰가 템플릿 뷰 패턴 의 구현)로 전달하여 컨트롤러에서 뷰를 분리 할 수 ​​있습니다 .

ASP.NET MVC에서와 같이 강력한 형식의 뷰 개념이 있거나 없을 때 대답이 변경됩니까?

프로그래밍 언어가 강력한 형식인지 여부는 응용 프로그램 구성 방식에 영향을 미치지 않습니다.


어떤 종류의 데이터가 준비되고 전달됩니까? ID를 기준으로 기사를 표시하는 간단한 예를 들어 보겠습니다. 확인 후 전달 된 ID입니까 (기사를 가리킬 수 없음) 컨트롤러가 데이터베이스에서 기사를 가져 와서이를 통과합니까?
Andy Hunt

ID 만 전달하면 뷰가 렌더링보다 더 많은 작업을 수행하지 않습니까? 패턴의 정신에 맞지 않는 데이터를 검색해야합니다.
Rig

1

당신이 제기하는 질문은 때때로 우리 팀에서 논의됩니다. 우리는 두 가지 접근 방식에 대해 논쟁하고 있습니다.

첫 번째는 컨트롤러가 다음 패턴으로보기를 업데이트 할 수 있다고 주장합니다. GUI 및 모델 이벤트를 모두 수신합니다. GUI 이벤트가 발생하면 모델에서 필요한 조치를 실행하여 실행 및 이벤트가 발생합니다. 이제 컨트롤러는 일반적으로 필요한 데이터로보기를 업데이트합니다.

두 번째 방법은 뷰 자체가 모델 이벤트를 수신하고 이벤트에 첨부되거나 모델을 쿼리하여 데이터로 자체 업데이트된다고 주장합니다.

첫 번째 접근 방식에서는 컨트롤러에 더 많은 전력을 공급하여 애플리케이션에서 진행중인 모든 것을 실제로 제어합니다. 그의 손에 어떤 이벤트가 있는지에 따라 뷰를 업데이트해야하는 방식을 결정하는 권한과이 방식으로 뷰를 순수하게 유지합니다. 그러나 당신이 말했듯이, 이렇게하면 뷰와 컨트롤러가 결합됩니다.

두 번째로 당신은 그것들을 분리하지만 당신의 견해는 실제로 어떤 방식으로 스스로를 통제하고 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.