2012-02-24 4 views
1

그래서 .net과 MVC에 대해 조금 읽었습니다. MVC에서 ViewModels 사용을 제안한 것을 읽은 것을 기억합니다. 이렇게하면 컨트롤러가 제어해야하는 데이터가보기에 엉망이되어 버릴 염려가 줄어들 것입니다.에 대해 혼란 스러워요 .net MVC 모델 및 모델보기

이것이 MVVM 패턴에 의해 참조되는 것으로 생각했습니다. 분명히 그것을 살펴본 결과, 실제로 구현은 컨트롤러를 완전히 제거합니다. 정확히 내가하고 싶은 것이 아닙니다.

필자의 경우 ViewModel을 사용하는 것이 합법적입니까? 더 나은 연습인가 불필요한 작업인가? ViewModels 디렉토리/네임 스페이스는 어디에 두겠습니까? 모델 디렉토리 아래에 있습니까?

모델이 ViewModels에 대해 알고있는 것이 합법적입니까? 예를 들어, 컨트롤러에 ViewModel을 반환하는 모델이 있습니까?

+0

내가있는 jqGrid를 사용하십시오 asp.net MVC 프로젝트입니다. jqgrid에는 특정 요청 및 응답 데이터 구조가 필요합니다. 그래서 jqgrid를 사용하기 위해 특정 뷰 모델을 만들었습니다.간단한 값 형식, 사전 형식, IEnumerable 형식과 같은 간단한 입력 데이터 (컨트롤러 동작)의 경우 asp.net mvc는 일반적으로 해당 데이터에 "바인딩"하는 방법을 이해할 수 있습니다. –

+0

여기에 대한 참조를 추가하고 싶지만 특정 답변에 대한 자격이 있는지 확실하지 않으므로 여기에 입력 해 보겠습니다 : http://freshbrewedcode.com/joshbush/2012/03/05/mass-assignment-aspnet-mvc/ – Chris

답변

1

모델과 ViewModel이 다릅니다. ViewModel과 MVVM 패턴을 혼동하지 마십시오.

뷰 모델을 사용하면 모델과 뷰 간 상호 작용을보다 쉽게 ​​할 수 있습니다. 모델은 때로는 모델 객체를 멤버로 가질 수있는 다른 모델 객체를 멤버로 갖는 복잡한 작업이 될 수 있습니다.

뷰 모델을 사용하면 뷰를 처리하는 방법을 간소화 할 수 있습니다. 또한 Intellisense에서 볼 수있는 것을 필터링하므로보기에서 작업하는 것보다 다른 사람들이 모델을 개발하는 경우 간단한보기 모델을 작성하면 UI 만 처리하는 사람들이 훨씬 쉽게 작업 할 수 있습니다.

+0

모델 네임 스페이스에 ViewModels 네임 스페이스를 넣으시겠습니까? 다른 곳에서해야 할 일인가요? –

+0

그건 내 프로젝트에서 보통 ViewModel 폴더를 만드는 것은 당신에게 달려 있습니다. – goenning

+4

@Walt - 대부분의 중요하지 않은 프로젝트는 서로 다른 프로젝트에 비즈니스 레이어와 데이터 레이어를 배치하기 때문에 MVC의 모델 폴더는보기 모델에만 사용됩니다. 그렇게하지 않으면 ViewModels 폴더를 쉽게 생성하여 분리를 생성 할 수 있습니다. –

1

내 생각에 디자인 패턴은 엄격한 개념이 아니라 오히려 응용 프로그램을보다 잘 설계하는 데 도움이되는 지침입니다. MVVM (Model-View-ViewModel) 디자인 패턴은 WPF에서 유래합니다. 패턴을 촉진하는 매우 강력한 Bata Binding 프레임 워크가 있습니다. 아이디어는 모델에 비즈니스 데이터가 있지만 모델에 속하지 않는 특정 데이터 (예 : 트리 컨트롤에서 현재 선택된 항목)를 보는 경우가 많으므로 모델을 래핑하는 뷰 모델 객체를 만들고, 뷰 모델에는 뷰 특정 상태 데이터도 포함되어있었습니다. 따라서 뷰를 모델 객체 대신 뷰 모델에 직접 바인딩 할 수 있으므로 모델을 깨끗하게 유지 (테스트, 유지 관리 등) 할 수 있습니다.

Asp.net MVC는 Views의 데이터 바인딩이 WPF만큼 강력하지는 않다는 점에서 다릅니다. WPF에서는 실제로 뷰 모델을 유용하게 만든 데이터 바인딩을 통해 GUI와 모델 데이터 상호 작용을 구현할 수 있습니다. 하지만 Asp.net MVC에서 컨트롤러가이 문제를 처리하도록 설계되었으며 데이터 바인딩이 존재하지 않는 것에 가깝기 때문에 Asp.net MVC에서 모델 개체 주위에 뷰 모델 래퍼를 갖는 것이 중요하지 않습니다.

+1

값을 볼 수는 없지만 거기에 있습니다. 하나는 ASP.NET MVC의 빌드를 데이터 주석을 통해 유효성 검사에 사용하면 도메인 객체를 오염시키는 대신 유효성 검사 속성으로 장식 된 별도의 뷰 모델을 만드는 것이 훨씬 깔끔합니다. 또한 뷰 모델을 특정 뷰 요구 사항에 맞게 조정할 수 있습니다. 뷰의 DTO와 유사합니다. – Chris

+0

@Chris - 엔티티 수준 보안 구현이 도메인 모델이 아닌 뷰 모델 계층에 속한다고 생각하십니까? 현재 각 엔티티에 보안 ID 필드를 추가 할 것을 고려 중입니다. 그러나 다른 보안 공급자 나 프레임 워크를 사용하면 내 도메인 엔티티의 모든 세속적 인 특정 필드를 변경해야 할 수 있으므로 내 도메인을 "오염"시키는 것으로 보입니다. –

+0

@Chris - .NET에서 최소한 ViewModel/Model을 컨트롤러의 작업 메서드에 대한 매개 변수로 만들 수 있기 때문에 ViewModel/Model 질문에 대해 궁금해했습니다 .Net은 양식 제출 또는 정기적 요청에서 값을 자동으로 채 웁니다. ViewModel을 사용하는 경우, ViewModel에서 모델로 데이터를 가져 오기 위해 매번 추가 단계를 거쳐야합니다. 플립 측에서는 작업 모델에 여러 모델로 표시된 데이터가 필요할 수 있으므로 ViewModel은 매우 유용합니다. 그 상황. –

2

ViewModels은 기본적으로 MVC 프로젝트에서 지원되지 않습니다. 그것은 당신이 당신이이 모델 "쉽게"당신이 되겠지만

http://rachelappel.com/use-viewmodels-to-manage-data-amp-organize-code-in-asp.net-mvc-applications

뷰 모델의 개념은 단지 ASP.NET MVC위한 것이 아닙니다에 몇보기로 혜택을 경험하는 경우에 추가 할 필요가 뭔가 MVC, MVP 및 MVVM 패턴에 대한 기사 및 블로그 게시물의 웹에서 ViewModels에 대한 참조를 참조하십시오. 이러한 게시물과 기사는 ASP.NET, Silverlight, WPF 또는 MVC와 같은 여러 기술을 중심으로 할 수 있습니다.이 게시물은 ASP.NET MVC 세계에 적용되는 ViewModel을 조사합니다.

http://msdn.microsoft.com/en-us/magazine/ff798279.aspx

+0

그래서 모델은 컨트롤러에 뷰 모델을 반환 할 수 있습니까? 어떤 이유로 나는 데이터를 보지 않아야하고 컨트롤러가 Model 데이터를 ViewModel에 보내고 뷰에 전달해야한다고 생각하고있었습니다. –

+0

나는 그것들을 별도로 유지할 것이다. –

관련 문제