2012-04-14 2 views
3

이 답변에 따르면보기에서 모델을 호출하는 것이 좋습니다.MVC 배선; 보기 및 모델

Can I call a Model from a View?

이제 제 질문은, 어떻게 것 배선 모습처럼?

컨트롤러가 Model Factory를보기로 전달합니까?

또는

가보기에 주입 모델 공장겠습니까 (나는 내가 이해 잘못이야하지 않는 한 그렇게하기 위해 컨트롤러를 우회해야하기 때문에,이 질문의 목적을 물리 칠 것이라고 생각한다) 보기가 컨트롤러로 전달되기 전에보기의 생성자?

+0

이것은 프레임 워크에 따라 다를 수 있습니다. – Michelle

+0

추상화 수준에 따라 VS. 성능은 맵을보기 위해 모델을 기반으로 작성 될 때보기에서 데이터를 설정할 수있는 Dependency Injection 프레임 워크를 사용하여 조사 할 수 있습니다. (참조 : http://en.wikipedia.org/wiki/Dependency_injection) 또한 MVC는 실제로 어떤 MVC를 사용하고 있습니까? –

+0

@ResistDesign MVC 프레임 워크에 관해서 공부하고 있었는데, 코드가별로 보이지 않아서 어떻게 생겼는지 궁금해했습니다. – Tek

답변

2

언뜻보기에는 문제가 없습니다. 이제 대안을 살펴 보겠습니다 :

  1. 뷰에 원시 모델을 전달 입력 표면에 일반 모델 인터페이스

    을 암시,이 괜찮 것처럼 보일 수 있습니다. 그러나 모델이 일관성이없는 경우 (예 : $model->getPerson($id)) 컨트롤러 모델과보기를 효과적으로 연결하는 것입니다.

    모델에서 모델을 실제로 받아 들일 수 없으므로 컨트롤러의 원시 모델을 주입하는 것이 약간의 자유주의 일 수 있으며 길 아래의 불일치 또는 이상한 오류가 발생할 수 있습니다.

  2. 형 통과 할 수있는 단지 정확한 모델에서 원하는 모델 클래스

    이 종래 용액으로부터 liberalness 문제 해결을 암시 뷰로 원료 전달 모델. 그러나 이제는 뷰를 해당 모델과 더 결합했습니다. 그래서 좋지 않습니다.

  3. 뷰 내부에서 모델 인스턴스화.

    이것은 또한 이상적인 솔루션이 아닙니다. 이제 테스트를 위해 모델을 조롱하거나 모델에 뷰를 완전히 결합 할 수 없기 때문입니다. 명확한 SOLID 위반.

그래서 모델의 공장에 기본적으로 분사됩니다. 뷰를 통해 필요한 모델을 결정할 수 있습니다 (따라서 공장에서 요청합니다). 모델을 조롱 할 수 있습니다 (다른 공장과 교환). 또한 공장에서 반환하는 것을 조정하여 임의의 모델을 전달할 수도 있습니다.

그래서 종속성이 느슨하게 결합되어 있고, 공장에 종속되어 있습니다 (더 의존적입니다).

그건 내 첫 번째 생각입니다. 더 깔끔한 해결책이 있는지 생각해 볼 필요가 있습니다.하지만 거기에 대해 생각해보십시오.