모델-뷰-뷰 모델
Model–view–viewmodelMVVM(Model-view-view-model)은 뷰가 특정 모델 플랫폼에 종속되지 않도록 비즈니스 논리 또는 백엔드 논리(모델)의 개발과 마크업 언어 또는 GUI 코드를 통해 개발되는 그래픽 사용자 인터페이스(뷰)의 개발을 분리하는 것을 용이하게 하는 소프트웨어 아키텍처 패턴이다.MVVM의 뷰 모델은 가치 변환기로,[1] 뷰 모델은 객체가 쉽게 관리되고 제시될 수 있도록 모델에서 데이터 객체를 노출(변환)할 책임이 있다.이 점에서 뷰 모델은 뷰보다 모델성이 높으며, 뷰의 표시 논리를 모두 다루지 않을 경우 대부분 처리한다.[1]뷰 모델은 뷰가 지원하는 사용 사례 집합을 중심으로 백엔드 논리에 대한 액세스를 구성하여 중재자 패턴을 구현할 수 있다.
MVVM은 마틴 파울러의 프리젠테이션 모델 설계 패턴의 변형이다.[2][3]그것은 특히 사용자 인터페이스의 이벤트 중심 프로그래밍을 단순화하기 위해 마이크로소프트의 건축가 켄 쿠퍼와 테드 피터스에 의해 발명되었다.이 패턴은 WPF(Windows Presentation Foundation)에 통합되었다(Microsoft의 .NET 그래픽 시스템) 및 실버라이트([3]WPF의 인터넷 애플리케이션 파생 모델).마이크로소프트의 WPF와 실버라이트 건축가 중 한 명인 존 고스만은 2005년 자신의 블로그를 통해 MVVM을 발표했다.[3][4]
모델-뷰-뷰 모델을 모델-뷰-바인더라고도 하며, 특히 를 포함하지 않는 구현에서는 더욱 그러하다.NET 플랫폼. ZK(Java로 작성된 웹 애플리케이션 프레임워크)와 KnockoutJS(JavaScript 라이브러리)는 모델-뷰-바인더를 사용한다.[3][5][6]
MVVM 패턴의 구성 요소
- 모델
- 모델은 실제 상태 컨텐츠를 나타내는 도메인 모델(객체 지향 접근법)이나, 콘텐츠를 나타내는 데이터 액세스 계층(데이터 중심 접근법)을 가리킨다.[citation needed]
- 보기
- 모델-뷰-컨트롤러(MVC)와 모델-뷰-프레젠터(MVP) 패턴에서처럼 뷰는 사용자가 화면에서 보는 것의 구조, 배치, 모양이다.[7]모델의 표현을 표시하며 뷰와의 상호 작용(마우스 클릭, 키보드 입력, 화면 탭 제스처 등)을 수신하고, 뷰와 뷰 모델을 연결하기 위해 정의된 데이터 바인딩(속성, 이벤트 콜백 등)을 통해 뷰 모델에 이들의 처리를 전달한다.
- 모형 보기
- 뷰 모델은 공공 재산과 명령을 노출하는 뷰의 추상화다.MVC 패턴의 컨트롤러나 MVP 패턴의 발표자 대신 MVVM은 뷰와 뷰 모델의 바인더 속성 사이의 통신을 자동화하는 바인더를 가지고 있다.뷰 모델은 모델의 데이터 상태로 설명되었다.[8]
- MVP 패턴에서 뷰 모델과 발표자의 주요 차이점은 발표자가 뷰에 대한 참조를 가지고 있지만 뷰 모델은 그렇지 않다는 것이다.대신, 보기가 업데이트를 보내고 받기 위해 뷰 모델의 속성에 직접 바인딩된다.효율적으로 기능하기 위해서는 바인딩 기술이나 바인딩을 하기 위한 보일러플레이트 코드를 생성해야 한다.[7]
- 바인더
- 선언적 데이터와 명령 바인딩은 MVVM 패턴에 내포되어 있다.마이크로소프트 솔루션 스택에서 바인더는 XAML이라고 불리는 마크업 언어다.[9] 바인더는 개발자가 뷰 모델과 뷰를 동기화하기 위해 보일러 플레이트 논리를 작성할 의무가 없도록 한다.마이크로소프트 스택 외부에서 구현될 때 선언적 데이터 바인딩 기술의 존재는 이러한 패턴을 가능하게 하며,[5][10] 바인더가 없으면 일반적으로 MVP나 MVC를 대신 사용하여 더 많은 보일러를 작성해야 한다(또는 다른 도구로 생성).
이론적 근거
MVVM은 WPF(Windows Presentation Foundation)의 데이터 바인딩 기능을 사용하여 사실상 모든 GUI 코드("코드-후면")를 뷰 레이어에서 제거하도록 설계되어 나머지 패턴과의 뷰 레이어 개발의 분리가 용이해졌다.[3]사용자 경험(UX) 개발자에게 GUI 코드를 작성하도록 요구하는 대신 프레임워크 마크업 언어(예: XAML)를 사용하고 뷰 모델에 데이터 바인딩을 만들 수 있어 애플리케이션 개발자가 작성·유지한다.역할 분리는 쌍방향 설계자들이 비즈니스 로직의 프로그래밍보다는 UX 니즈에 초점을 맞출 수 있도록 한다.따라서 애플리케이션의 계층은 높은 생산성을 위해 여러 작업 흐름에서 개발될 수 있다.단일 개발자가 전체 코드 베이스에서 작업할 때에도, 사용자 인터페이스는 일반적으로 최종 사용자 피드백에 기초하여 개발 주기에서 자주 그리고 늦게 변경되기 때문에 모델과 뷰를 적절하게 분리하는 것이 더 생산적이다.[citation needed]
MVVM 패턴은 데이터 바인딩의 장점과 데이터를 최대한 순수 애플리케이션 모델에 가깝게 바인딩하여 프레임워크와 데이터 바인딩의 장점을 모두 활용하면서 MVC가 제공하는 기능 개발의 분리라는 두 가지 장점을 모두 얻으려고 시도한다.[3][4][11][clarification needed]바인더, 뷰 모델 및 모든 비즈니스 계층의 데이터 확인 기능을 사용하여 수신 데이터를 검증한다.그 결과 모델과 프레임워크는 가능한 한 많은 작업을 구동하여 뷰를 직접 조작하는 애플리케이션 로직을 제거하거나 최소화한다(예: 코드-뒤집기).
비판
John Gosman은 MVVM 패턴과 그 응용 프로그램을 특정 용도에서 비판하면서 MVVM이 단순한 사용자 인터페이스를 만들 때 "과잉 킬"될 수 있다고 말했다.더 큰 애플리케이션의 경우, 미리 보기 모델을 일반화하는 것이 어려울 수 있으며, 대규모 데이터 바인딩이 성능 저하를 초래할 수 있다고 생각한다.[12]
구현
.NET 프레임워크
- 프리즘 라이브러리
- 교정 / 교정.마이크로
- .NET 커뮤니티 툴킷
- DevExpress MVVM
- DotVVM 오픈 소스 프로젝트
- MVMLight 툴킷
- 해파리
- 반응성UI
- Mugen MVVM 툴킷
- Uno 플랫폼 - 오픈 소스
- 라스클
- MvmCross
- 프레시Mvm
자바스크립트 프레임워크
C++ 및 XAML용 프레임워크(Windows)
참고 항목
참조
- ^ a b Google groups. "Thought: MVVM eliminates 99% of the need for ValueConverters".
{{cite web}}
:author=
일반 이름 포함(도움말) - ^ Martin Fowler (19 July 2004). "The Presentation Model Design Pattern". Martin Fowler.com.
- ^ a b c d e f Smith, Josh (February 2009). "WPF Apps with the Model–View–ViewModel Design Pattern". MSDN Magazine.
- ^ a b Gossman, John (8 October 2005). "Tales from the Smart Client: Introduction to Model/View/ViewModel pattern for building WPF apps".
- ^ a b Massey, Simon. "Presentation Patterns in ZK". Retrieved 24 March 2012.
- ^ Steve Sanderson. "KnockoutJS".
- ^ a b "The MVVM Pattern". msdn.microsoft.com. Retrieved 29 August 2016.
- ^ Pete Weissbrod. "Model–View–ViewModel Pattern for WPF: Yet another approach". Archived from the original on 1 February 2008.
- ^ Wildermuth, Shawn. "Windows Presentation Foundation Data Binding: Part 1". Microsoft. Retrieved 24 March 2012.
- ^ "ZK MVVM". Potix. Retrieved 24 March 2012.
- ^ Karl Shifflett. "Learning WPF M-V-VM". Archived from the original on 13 April 2009. Retrieved 5 June 2009.
- ^ John Gossman. "Tales from the Smart Client: Advantages and disadvantages of M-V-VM".
{{cite journal}}
:Cite 저널은 필요로 한다.journal=
(도움말)
외부 링크
- "How to implement MVVM (Model–View–ViewModel) in TDD (test-driven development)". Microsoft Developer Network. Microsoft.
- "Introduction to Model/View/ViewModel pattern for building WPF apps". Microsoft Developer Network. Microsoft.
- Tim Clare가 Java로 작성한 MVVM 검증 논리
- "Understanding MVVM: A Guide for JavaScript Developers". AddysOnmani.com.
- "MVVM Step by step tutorial". learnmvvm.com. Archived from the original on 5 February 2020.