좋아, MS의 ASP.NET MVC와 관련하여 "ViewModels"에 대한 논의를 들었습니다.
자, 그것은 특정 종류의 모델을 의도 한 것입니다. 맞습니까? 특정 종류의보기가 아닙니다.
내 이해로는 뷰와 상호 작용하는 특정 목적을 가진 일종의 모델입니까? 아니면 그런가요?
약간의 설명을 주시면 감사하겠습니다.
답변:
본질적으로 Model과 View Model은 둘 다 속성이있는 단순한 클래스입니다.
이 클래스의 주요 목적은 컨트롤러와 뷰인 각각의 청중에 대한 개체를 설명하는 것입니다 ( "모델"에 대해).
그래서 당신이 말할 때 당신은 완전히 옳습니다
내 이해로는 View와 상호 작용하는 특정 목적을 가진 일종의 Model입니다.
따라서 모델 클래스는 애플리케이션이 상호 작용하는 도메인 엔터티 인 반면보기 모델은 뷰가 상호 작용하는 간단한 클래스입니다.
도움이되기를 바랍니다 :)
업데이트 :
Microsoft는 주로 Model-View-Controller를 기반으로하는 Martin Fowler의 Presentation Pattern의 특수 버전을 개발했으며이를 PF 애플리케이션 용 MVVM (Model-View-ViewModel)이라고합니다. 이 패턴은 UI 개발자가 기존 개발자보다 비즈니스 로직을 기반으로 다른 요구 사항이있는 최신 UI 개발 플랫폼을 대상으로합니다. 여기 에서 약간의 이론을 살펴보십시오.
가장 간단한 용어로 저는 다음을 생각하고 싶습니다.
모델 : 엄격하게 데이터 모델처럼 보이고 느껴집니다. 모든 의도와 목적을 위해 데이터 모델의 클래스 표현 일뿐입니다. 보기 또는보기 내의 요소에 대한 지식이 없습니다. 즉, 뷰에 사용할 속성 데코레이터 (예 : 필수, 길이 등)를 포함해서는 안됩니다.
보기 모델 : 보기와 모델 사이의 데이터 바인더 역할을하며 많은 경우 모델의 래퍼이기도합니다. 뷰 없이는 쓸모 없게 렌더링되므로 일반적으로 표준 모델처럼 여러 뷰 및 컨트롤러에서 재사용 할 수 없습니다.
예를 들어 모델에는 데이터 소스를 직접 표현하는 다음 속성이있을 수 있습니다.
public string FirstName { get; set; }
public string LastName { get; set; }
이제보기 모델이보기에 연결되어 있기 때문에 모델의 FirstName 필드와 LastName 필드를 하나의 문자열로 연결하는 다음 속성을 가질 수 있습니다.
[Display(Name = "Customer Name")]
public string CustomerFullName { get { return String.Format("{0} {1}", myModel.FirstName, myModel.LastName) }}
이 기사는 특히 바인딩과 관련하여 "도메인 모델"과 "보기 모델"이 MVC 응용 프로그램 내에서 상호 작용하는 방식을 이해하는 데 매우 유용한 리소스라는 것을 알았습니다. 무엇보다도 추상적 인 설명 대신 예제가 포함됩니다.
"MVC가 출시 된 이후로 저는 뷰 모델을 가장 잘 구성하는 방법에 대해 많은 혼란을 목격했습니다. 모범 사례 권장 사항에 대한 많은 정보가없는 것처럼 보이기 때문에 때때로 이러한 혼란이 정당한 이유 없이는 아닙니다. 또한 그렇지 않습니다. 은색 총알 역할을하는 "하나의 크기로 모두 적합"솔루션입니다.이 게시물에서는 몇 가지 주요 패턴과 각각의 장단점에 대해 설명합니다. 이러한 패턴 중 많은 부분에 유의해야합니다. 실제 문제를 해결하는 사람들에게서 나왔습니다. "
http://geekswithblogs.net/michelotti/archive/2009/10/25/asp.net-mvc-view-model-patterns.aspx
WikiPedia는 SO 답변에서 얻을 수있는 것보다 Model vs. ModelView에 대한 더 완전한 설명을 제공합니다. http://en.wikipedia.org/wiki/Model_View_ViewModel
나는 인용한다 :
모델 : 클래식 MVC 패턴에서와 같이 모델은 (a) 실제 상태 콘텐츠를 나타내는 개체 모델 (개체 지향 접근 방식) 또는 (b) 해당 콘텐츠를 나타내는 데이터 액세스 계층 (데이터- 중심 접근).
보기 : 클래식 MVC 패턴에서와 같이보기는 버튼, 창, 그래픽 및 기타 컨트롤과 같이 GUI에 표시되는 모든 요소를 참조합니다.
ViewModel : ViewModel은 View와 Model 사이의 데이터 바인딩에도 사용되는 View의 추상화를 의미하는 "View의 모델"입니다. 모델 정보를보기 정보로 변경하고보기에서 모델로 명령을 전달하는 데이터 바인더 / 변환기 역할을하는 컨트롤러 (MVC 패턴에서)의 특수한 측면으로 볼 수 있습니다. ViewModel은 공용 속성, 명령 및 추상화를 노출합니다. ViewModel은 모델에있는 데이터의 실제 상태와 반대로 데이터의 개념적 상태에 비유되었습니다.
ViewModel이라는 개념이 있지만 일반적으로 Asp.net MVC와 관련이 없습니다. MVC는 컨트롤러가 상호 작용을 처리하고 모델에서 데이터를 빌드 한 다음 표시를 위해 해당 데이터를 뷰로 전달하는 Model View Controller 패턴을 사용합니다.
ViewModels (및 Model View ViewModel 패턴)는 일반적으로 Silverlight 및 WPF와 관련이 있습니다. Xaml은 뷰가 ViewModel에 양방향 바인딩을 수행 할 수 있다는 점에서 약간 다르므로 기술이 약간 다릅니다. 예를 들어 텍스트 상자를 필드에 바인딩하면 해당 텍스트 상자에 입력 할 때 필드 값이 동적으로 업데이트됩니다. 웹 페이지는 상태 비 저장이기 때문에 이러한 종류의 상호 작용은 웹 페이지에서 실제로 가능하지 않습니다.
두 패턴의 유사점은 둘 다 디스플레이에서 로직을 분리하려고한다는 것입니다. 가장 일반적인 사용 / 이유는 테스트입니다. 사용자가 사용자 인터페이스를 통해 호출 할 모든 상호 작용을 코드 (테스트 프레임 워크를 통해)에서 수행 할 수 있기를 원합니다.