2009-04-02 2 views
0

일반적으로 하나의 컨트롤러와 하나의 모델이 있습니다. 여러 개의 컨트롤러와 여러 개의 모델로 구성된 1 개의 뷰가있는 패턴이 있습니까? 컨트롤러가 여러 모델을 가질 수있는 곳은 어디입니까?C#의 MVC : 모델 - 컨트롤러 관계

관련 패턴에 대한 링크가 좋을 것입니다.

답변

2

일반적으로 제어기에는 하나의 모델 만 있습니다. 그러나 자체로 여러 모델을 가진 복합 모델을 만들 수 있습니다.

class CompositeModel 
{ 
private ModelA modela; 
private ModelB modelb; 
} 

그리고 컨트롤러에 입력하십시오.

그러나 당신이 궁극적으로 무엇을하고 있는지 모르는 것이라면 그것은 눈물로 끝날 것입니다.

하지만 하나님 모델 패턴을 피할 수 있다면 매우 강력 할 수 있습니다.

+0

. 보기가 하나뿐이기 때문에이보기의 모든 데이터는 유일한 모델에서 가져와야한다고 생각합니다. 정말 너무 많이 성장하면 신 모델을 피하기 위해 더 많은 부분에서 내보기를 분할해야하는 것처럼 보입니다. – Tarion

+0

내가하는 한 가지는 CompositeModel의 책임을 서브 클래스의 (이벤트) 관리로 제한하는 것입니다. – Tarion

1

일반적으로 MVC를 공부하는 것이 좋습니다.

0

뷰가 다양한 하위 모델의 공통 속성을 표시하는 모델 계층 구조 (상속)가있는 경우에만 실제로 의미가 있습니다. 개념적으로 이것은 효과가있을 수 있지만 실용적인 문제로 나는 이것이 자주 일어나는 것을 보지 못합니다. 내 코드에서 이와 같은 방식으로 접근하는 유일한 곳은 Contact 필드입니다. Self Contact 및 Emergency 연락처가있는 User 모델이 있습니다. 두 접촉자는 모두 관계가 "자기"인지 아니면 다른 것인가에 따라 구분자가 같은 유형입니다. 이 연락처를 만드는 단일보기가 있고 해당보기 - CreateContactInformation 및 CreateEmergencyContact 같은 컨트롤러에서 두 가지 다른 작업에 의해 렌더링됩니다. 하지만이 경우에도 두 모델 모두 동일한 모델을 사용합니다. 모델을 서브 클래스로 선택할 수는 있었지만 그 복잡성을 보증 할 수있는 구별이 없었습니다.

일반적으로보기는 단일 컨트롤러에서 사용되며 각 컨트롤러는 단일 기본 모델을 처리한다고 가정합니다. 기본 모델에 대한 보조 모델은 기본 컨트롤러에서 처리하거나 응용 프로그램을 구성하려는 방법에 따라 자체 모델을 가질 수 있습니다.

1

MVC, 즉 모델 뷰 발표자 이후로 개발 된 다른 방법이 있습니다. Martin Fowler의 웹 사이트 Here은 이러한 패턴에 대한 개요입니다.

내 자신의 응용 프로그램은 수동으로 UI를 뜯어 내고 쉽게 다른 것으로 대체 할 수 있도록 수동보기를 사용합니다. 이 소프트웨어는 CAD/CAM 어플리케이션으로 다양한 금속 절삭 기계와 함께 사용할 수있는 장점이 있습니다.

우리의 양식은 UI 레이어를 호출하는 얇은 쉘입니다. 양식은 인터페이스를 구현하고 자체를 UI 레이어에 등록합니다. 우리는 다른 목적으로 사용되는 다양한 형태를 가지고 있습니다. 예를 들어 사용자가 사용하는 기계의 광범위한 설정 매개 변수를 수정하는 설정 양식, 모양 입력 양식, 사용자가 절단 할 모양을 배치하는 금속 절단 양식. 이 양식에는 모두 고유 한 UI가 있습니다.

또한 금속 절단 형태는 기계 유형에 따라 다릅니다. 하나는 금속의 평평한 판을 WYSIWYG로 볼 수 있습니다. 또 하나는 잘라낼 순서로자를 부분의 스프레드 시트 스타일 그리드입니다. 또 다른 하나는 회전하는 파이프에 위치 된 부품을 보여줍니다.

차례로 UI 레이어는 들어오는 입력을 받아 명령을 실행합니다. 명령은 차례로 UI 레이어 및 모델과 상호 작용합니다. 거의 모든 것이 메소드를 통한 직접 호출과 달리 명령 객체를 통해 처리됩니다.

이 구조를 사용하면 다양한 UI를 동일한 모델에 연결할 수 있습니다. 특정 UI 내에서 다양한 뷰를 지원할 수 있습니다. 모델로 표시된 것은 별도의 라이브러리 일 수 있습니다. UI 인터페이스 레이어 이상에서는 다른 라이브러리를 참조하는 UI 구성 요소를 통해서만 결합됩니다.

계층 구조는 다음과 같습니다.

  • 양식은 양식 인터페이스
  • UI는 UI Inferaces 구현 구현하고 폼으로 폼으로
  • 명령을 UI 인터페이스를 통해 모드 인터페이스와 상호 작용 인터페이스 상호 작용한다.
  • UI 인터페이스 지금거야 방법 그게
  • 모델