Megosztás:


Windows-adatkötés és MVVM

A Model-View-ViewModel (MVVM) egy felhasználói felület architekturális tervezési mintája, amely elválasztja a felhasználói felületet és a nem felhasználói felületi kódot. Ismerje meg, hogyan teszi lehetővé az MVVM a laza összekapcsolást adatkötés használatával az XAML-ben a felhasználói felület és az adatok szinkronizálása, a karbantarthatóság javítása és a függőségek csökkentése érdekében.

Mivel laza összekapcsolást biztosít, az adatkötés használata csökkenti a különböző kódtípusok közötti kemény függőségeket. Ez a megközelítés megkönnyíti az egyes kódegységek (metódusok, osztályok, vezérlők stb.) módosítását anélkül, hogy más egységekben nem kívánt mellékhatásokat okoz. Ez a szétválasztás példa az aggodalmak elkülönítésére, amely számos tervezési mintában fontos fogalom.

Az MVVM előnyei

A kód leválasztása számos előnnyel jár, például:

  • Iteratív, feltáró kódolási stílus engedélyezése. Az izolált változás kevésbé kockázatos, és könnyebb kísérletezni vele.
  • Az egységtesztelés egyszerűsítése. Tesztelheti az egymástól elkülönített kódegységeket külön-külön, az éles környezeten kívül.
  • A csapat együttműködésének támogatása. A különálló egyének vagy csapatok olyan különálló kódot fejleszthetnek, amely megfelel a jól megtervezett felületeknek, és később integrálható.
  • A karbantarthatóság javítása. A leválasztott kód hibáinak kijavítása kevésbé valószínű, hogy más kódban regressziót okoz.

Az MVVM-sel ellentétben a hagyományosabb "kód mögötti" struktúrával rendelkező alkalmazások jellemzően adatkötést használnak a csak megjelenített adatokhoz. A vezérlők által közzétett események közvetlen kezelésével válaszol a felhasználói bemenetekre. Az eseménykezelők kód mögötti fájlokban (például MainWindow.xaml.cs) vannak implementálva, és gyakran szorosan kapcsolódnak a vezérlőkhöz. Általában olyan kódot tartalmaznak, amely közvetlenül módosítja a felhasználói felületet. Ez a struktúra megnehezíti vagy lehetetlenné teszi a vezérlők cseréjét az eseménykezelési kód frissítése nélkül. Ezzel az architektúrával a kód mögötti fájlok gyakran olyan kódot halmoznak fel, amely nem kapcsolódik közvetlenül a felhasználói felülethez, például az adatbázis-hozzáférési kódot, amely végül duplikálva és módosítva lesz más ablakokkal való használatra.

Alkalmazásrétegek

Az MVVM-minta használatakor ossza fel az alkalmazást a következő rétegekre:

  • A modellréteg határozza meg az üzleti adatokat képviselő típusokat. Ez a réteg mindent tartalmaz, ami az alapvető alkalmazástartomány modellezéséhez szükséges, és gyakran tartalmazza az alapvető alkalmazáslogikát is. Ez a réteg teljesen független a nézet- és nézetmodell-rétegekétől, és gyakran részben a felhőben található. A teljes modellrétegnek megfelelően több különböző ügyfélalkalmazást is létrehozhat, például a Windows App SDK-t és az azonos mögöttes adatokat használó webalkalmazásokat.
  • A nézet réteg XAML-jelölés használatával határozza meg a felhasználói felületet. A korrektúra adatkötési kifejezéseket (például x:Bind) tartalmaz, amelyek meghatározzák az adott felhasználói felület összetevői, valamint a különböző nézetmodellek és modelltagok közötti kapcsolatot. Előfordulhat, hogy a nézetréteg részeként kód mögötti fájlokkal további kódot is tartalmazhat a felhasználói felület testreszabásához vagy módosításához, illetve az eseménykezelő argumentumokból származó adatok kinyeréséhez, mielőtt meghívna egy olyan nézetmodell-metódust, amely elvégzi a munkát.
  • A nézetmodell réteg adatkötési célokat biztosít a nézethez. A nézetmodell sok esetben közvetlenül teszi elérhetővé a modellt, vagy olyan tagokat biztosít, amelyek meghatározott modelltagokat burkolnak. A nézetmodell tagokat is definiálhat a felhasználói felület szempontjából releváns adatok nyomon követéséhez, de nem a modellhez, például az elemek listájának megjelenítési sorrendjéhez. A nézetmodell más szolgáltatásokkal, például adatelérési kóddal is integrációs pontként szolgál. Egyszerű projektek esetén előfordulhat, hogy nincs szükség külön modellrétegre, hanem csak egy nézetmodellre, amely az összes szükséges adatot tartalmazza.

Alapszintű és fejlett MVVM

Mint minden tervezési mintában, az MVVM implementálásának több módja is van, és számos különböző technika az MVVM része. Ezért számos különböző külső MVVM-keretrendszer támogatja a különböző XAML-alapú platformokat, köztük a Windows App SDK-t. Ezek a keretrendszerek azonban általában több szolgáltatást is tartalmaznak a leválasztott architektúra implementálásához, így az MVVM pontos definíciója kissé nem egyértelmű.

Bár a kifinomult MVVM-keretrendszerek nagyon hasznosak lehetnek, különösen nagyvállalati szintű projektek esetében, általában egy adott minta vagy technika bevezetésének költsége van, és az előnyök nem mindig egyértelműek a projekt méretétől és méretétől függően. Szerencsére csak azokat a technikákat alkalmazhatja, amelyek egyértelmű és kézzelfogható előnyt biztosítanak, és figyelmen kívül hagyhat másokat, amíg szükség nem lesz rájuk.

Különösen sok előnyt érhet el egyszerűen az adatkötés teljes erejének megértésével és alkalmazásával, valamint az alkalmazáslogika a korábban ismertetett rétegekre való elválasztásával. Ez csak a Windows App SDK által biztosított képességek használatával és külső keretrendszerek használata nélkül érhető el. Az {x:Bind} korrektúrakiterjesztés megkönnyíti és nagyobb teljesítményűvé teszi az adatkötést, mint a korábbi XAML-platformokon, így nincs szükség a korábban igényelt sablonkód nagy részének szükségességére.

Az alapszintű, beépített MVVM használatával kapcsolatos további útmutatásért tekintse meg a GitHubon található Ügyfélrendelések adatbázis UWP-mintáját . A többi UWP-alkalmazásminta is alapszintű MVVM-architektúrát használ, a Traffic App UWP-mintája pedig kód mögötti és MVVM-verziót is tartalmaz, az MVVM-átalakítást leíró jegyzetekkel.

Lásd még

Témakörök

Részletes adatkötés
{x:Bind} kódbővítmény

UWP MVVM-minták

Ügyfelek rendelési adatbázisának mintája
VanArsdel Inventory-minta
Forgalmi alkalmazás minta