Model View ViewModel
Model View ViewModel ( MVVM ) je návrhový vzor a varianta vzoru Model-View-Controller (MVC). Slouží k oddělení reprezentace a logiky uživatelského rozhraní (UI). Zaměřuje se na moderní platformy uživatelského rozhraní, jako je Cocoa , Windows Presentation Foundation (WPF), JavaFX a HTML5, protože je vyžadován mechanismus vázání dat. Ve srovnání se vzorem MVC lze zlepšit testovatelnost a snížit úsilí implementace, protože nejsou vyžadovány žádné samostatné instance řadiče . MVVM umožňuje oddělit role návrhářů a vývojářů uživatelského rozhraní, což znamená, že aplikační vrstvy mohou být vyvíjeny různými pracovními skupinami. Návrháři se mohou soustředit na uživatelskou zkušenost a vývojáři mohou psát uživatelské rozhraní a obchodní logiku .
Dějiny
MVVM byl publikován v roce 2005 Microsoft MVP John Gossman. Jedná se o specializaci Prezentačního modelu od Martina Fowlera a je s ní identická v tom, že oba vzory přesouvají stav a chování pohledu do samostatného modelu uživatelského rozhraní (prezentace nebo model pohledu). Nicméně, prezentace modelu umožňuje pohled má být generován nezávisle na UI platformy, zatímco MVVM původně má za cíl uživatelských rozhraní pomocí WPF. Nyní se však používá také v jiných oblastech, podobně jako MVC.
popis
MVVM používá funkční oddělení vzoru MVC modelu a pohledu. K dosažení uvolněné vazby mezi těmito komponentami se používá mechanismus vázání dat. Vzor MVVM má následující tři komponenty:
- Model: Vrstva přístupu k datům pro obsah, který se zobrazuje uživateli a manipuluje s ním. Za tímto účelem vás upozorní na změny dat a ověří data přenesená uživatelem. Obsahuje celou obchodní logiku a lze jej zkontrolovat samostatnými testy jednotek .
- Pohled: Všechny prvky zobrazené grafickým uživatelským rozhraním ( GUI ). Váže se na vlastnosti ViewModel za účelem zobrazení a manipulace s obsahem a předávání vstupu uživatele. Vzhledem k datové vazbě lze pohled snadno vyměnit a jeho kódové pozadí je minimální.
- ViewModel: Obsahuje logiku uživatelského rozhraní (model pohledu) a slouží jako odkaz mezi pohledem a výše uvedeným modelem. Na jedné straně si vyměňuje informace s modelem, tj. Vyvolává metody nebo služby . Na druhou stranu poskytuje zobrazení veřejné vlastnosti a příkazy . Jsou vázány na ovládací prvky podle zobrazení za účelem výstupu obsahu nebo předávání událostí uživatelského rozhraní. ViewModel nesmí mít žádné znalosti o pohledu.
Vzor MVVM lze popsat jako specifický pro technologii, protože k propojení View a ViewModel je vyžadován mechanismus vázání dat. Tato infrastruktura se často označuje jako pojivo . Podrobně se jedná o obousměrné použití vzoru pozorovatele . Binder , který dokáže navázat datovou vazbu na základě deklarativních informací, je k dispozici pro různé technologie.
.NET a JavaFX
Z hlediska WPF a Silverlight znamená MVVM, že pohled se skládá z čistě deklarativního značení XAML . Může být navržen návrháři uživatelského rozhraní pomocí Expression Blend , přičemž je třeba vytvořit pouze datové vazby k ViewModel, ale bez kódu. Logika je implementována v programovacím jazyce, jako je C # nebo VB.NET . Závislosti mezi značkami a kódem jsou minimalizovány. Totéž platí pro JavaFX. Zde lze pohled vyvinout pomocí FXML a například SceneBuilder a poté propojit s obchodní logikou v ViewModel prostřednictvím jednosměrné nebo obousměrné vazby vlastnosti.
JavaScript / HTML
Vzorek MVVM a požadovaný mechanismus datové vazby byly přeneseny do JavaScriptu v roce 2010 vývojářem Microsoftem Stevem Sandersonem . Výsledná knihovna JavaScriptu se nazývá Knockout.js . Vzor MVVM se nyní používá také v jiných rámcích JavaScriptu, například B. AngularJS . Použitím vzoru MVVM pro webové aplikace náročné na klienta se sníží úsilí o implementaci, protože jinak lze datové vazbě výrazně snížit obvyklé manuální přístupy DOM . Popis datové vazby je také deklarativní, stejně jako u produktů Microsoft založených na XAML .
Android
Vzor MVVM a datovou vazbu lze také použít při implementaci mobilních aplikací pro Android .
Výhody a nevýhody
výhody
- Obchodní logiku lze upravovat nezávisle na reprezentaci. MVVM „dědí“ snadnější zaměnitelnost pohledu ze vzoru MVC .
- Testovatelnost je vylepšena, protože ViewModel obsahuje logiku uživatelského rozhraní a lze ji vytvořit nezávisle na zobrazení. To znamená, že nejsou nutné žádné testy uživatelského rozhraní. Místo toho postačují testy modulů na základě kódu ViewModel.
- Množství kódu lepidla mezi modelem a zobrazením se sníží vyloučením instancí řadiče ve srovnání se vzorem MVC.
- Zobrazení mohou navrhovat čistí návrháři uživatelského rozhraní, zatímco vývojáři implementují modely a zobrazují modely samostatně.
- Lze vytvořit různé pohledy, které jsou všechny propojeny se stejným ViewModel, aniž byste museli provádět změny v programování.
nevýhoda
- Vyšší výpočetní úsilí díky zahrnutému obousměrnému pozorovateli lze hodnotit jako nevýhodu .
- Obecný mechanismus vázání dat šetří implementaci různých řadičů. Tento mechanismus je však naprosto nezbytný k implementaci modelu MVVM.
MVVM rámce
MVVM implementují různé rámce.
- Windows Presentation Foundation
- Knockout.js - MVVM v JavaScriptu
- Vue.js
- JavaFX
- SwiftUI
Existují také pomocné knihovny, které mají usnadnit použití WPF. Tito jsou také známí jako MVVM frameworks. To zahrnuje
- Hranol
- Crosslight (komerční rámec od společnosti Intersoft Solutions)
- MVVM Light
- Caliburn. Mikro
a mnoho dalších.
Viz také
literatura
- Raffaele Garofalo: Vytváření podnikových aplikací s Windows Presentation Foundation a Model View View Model Pattern , Microsoft Press 2011, ISBN 978-0735650923
webové odkazy
- Visual C # 2012: Vzor MVVM - kapitola knihy v Rheinwerk Verlag
- Norbert Eder: Model-View-ViewModel Série - příklad kódu
- Balíčky NuGet pro rámce MVVM
Individuální důkazy
- ↑ Prezentační model
- ↑ Definice pořadače z rámce ZK
- ↑ Android Data Binding Guide (anglicky)
- ^ John Gossman: Tales from the Smart Client: Výhody a nevýhody MV-VM. . Citováno 28. května 2012.