문제 MVC
는 사람들이 뷰, 컨트롤러 및 모델이 가능한 한 독립적이어야한다고 생각한다는 것입니다. 그것들은 뷰가 아니며 컨트롤러가 종종 얽혀 있다고 생각합니다 M(VC)
.
컨트롤러는 사용자 인터페이스의 입력 메커니즘으로, 특히 GUI와 함께보기에서 종종 엉켜 있습니다. 그럼에도 불구하고 뷰가 출력되고 컨트롤러가 입력됩니다. 뷰는 종종 해당 컨트롤러없이 작동 할 수 있지만 일반적으로 뷰가 없으면 컨트롤러의 유용성이 훨씬 떨어집니다. 사용자 친화적 인 컨트롤러는 뷰를 사용하여보다 의미 있고 직관적 인 방식으로 사용자 입력을 해석합니다. 이것이 컨트롤러 개념을보기에서 분리하기 어렵게 만드는 것입니다.
밀폐 된 상자의 감지 영역에서 무선 제어 로봇을 모델로 생각하십시오.
모델은 출력 (디스플레이) 개념이없는 상태 및 상태 전이에 관한 것입니다. 현장에서 로봇의 위치를 파악할 수 있고 로봇은 위치를 전환하는 방법을 알고 있습니다 (앞으로 / 뒤로 / 왼쪽 / 오른쪽으로 이동합니다.보기 나 컨트롤러없이 쉽게 구상 할 수 있지만 유용한 것은 없습니다.
컨트롤러가없는보기, 예를 들어 스크롤 콘솔 아래로 스트리밍하는 (x, y) 좌표로 로봇 위치를보고있는 다른 방에있는 네트워크의 다른 방에있는 누군가를 생각하십시오. 이 뷰는 모델의 상태 만 표시하지만이 녀석에는 컨트롤러가 없습니다. 컨트롤러없이이보기를 쉽게 구상 할 수 있습니다.
예를 들어 무선 주파수 컨트롤러가 로봇의 주파수에 맞춰진 벽장에 잠겨있는 사람이 보이지 않는 컨트롤러를 생각해보십시오. 이 컨트롤러는 입력을 보내고 있으며 모델에 수행중인 작업을 모를 경우 상태 전환을 유발합니다 (있는 경우). 구상하기는 쉽지만보기에서 일종의 피드백 없이는 실제로 유용하지 않습니다.
가장 사용자 친화적 인 UI는 컨트롤러와 뷰를 조정하여보다 직관적 인 사용자 인터페이스를 제공합니다. 예를 들어 로봇의 현재 위치를 2D로 표시하는 터치 스크린이있는 뷰 / 컨트롤러가 사용자가 로봇의 바로 앞에있는 지점을 터치 할 수 있다고 상상해보십시오. 컨트롤러는 뷰포트의 위치 및 스케일, 화면상의 로봇의 픽셀 위치에 대해 터치 된 스팟의 픽셀 위치 등 뷰에 대한 세부 정보가 필요합니다. 라디오 컨트롤러).
아직 질문에 대답 했습니까? :-)
컨트롤러는 모델이 상태를 전환하는 데 사용되는 사용자의 입력을받는 것입니다. 뷰와 컨트롤러를 분리 된 상태로 유지하려고하지만 서로 상호 의존적 인 경우가 많으므로 경계가 모호한 경우 괜찮습니다. 예를 들어 별도의 패키지로 뷰와 컨트롤러를 깔끔하게 분리하지 못할 수 있습니다. 좋아하지만 괜찮습니다. 뷰가 모델과 다르기 때문에 컨트롤러가 뷰와 완전히 분리되지 않을 수도 있습니다.
... 컨트롤러에서 유효성 검사 등을 수행해야합니까? 그렇다면 오류 메시지를 다시보기로 피드백하는 방법-모델을 다시 통과해야합니까, 아니면 컨트롤러가 다시보기로 다시 보내야합니까?
확인이 View에서 수행되면 Controller에 무엇을 넣습니까?
링크 된 뷰와 컨트롤러는 모델을 거치지 않고 자유롭게 상호 작용해야한다고 말합니다. 컨트롤러는 사용자의 입력을 받아 유효성 검사를 수행해야하지만 (아마도 모델 및 / 또는보기의 정보를 사용하여) 유효성 검사에 실패하면 컨트롤러가 관련보기를 직접 업데이트 할 수 있어야합니다 (예 : 오류 메시지).
이것에 대한 산성 테스트는 독립적 인 견해 (예 : 네트워크를 통해 로봇 위치를보고있는 다른 방의 사람)가 다른 사람의 유효성 검사 오류 (예 : 옷장에있는 사람)의 결과로 볼 수 있는지 여부입니다 로봇에게 현장에서 물러나라고 지시했습니다. 일반적으로 대답은 아니오입니다. 유효성 검사 오류로 인해 상태 전이가 방지되었습니다. 상태 추적이없는 경우 (로봇이 이동하지 않은 경우) 다른 견해를 말할 필요가 없습니다. 옷장에있는 사람은 단지 잘못된 전환 (보기가 안 됨-잘못된 사용자 인터페이스)을 유발하려고 시도한 피드백을 얻지 못했으며 아무도 그 사실을 알 필요가 없습니다.
터치 스크린을 가진 사람이 로봇을 현장 밖으로 보내려고한다면, 로봇을 감지 구역 밖으로 보내 로봇을 죽이지 말라고하는 사용자에게 친근한 메시지를 받았지만, 아무도 이것을 알 필요가 없습니다.
다른 뷰 가 이러한 오류에 대해 알아야 할 경우 사용자의 입력과 결과 오류가 모델의 일부이며 전체가 조금 더 복잡 하다는 것을 효과적으로 말하고 있습니다 ...