Udostępnij przez


Powiązanie danych systemu Windows i mvVM

Model-View-ViewModel (MVVM) to wzorzec architektury interfejsu użytkownika, który rozdziela kod interfejsu użytkownika od kodu poza interfejsem. Dowiedz się, w jaki sposób mvVM umożliwia luźne sprzęganie przy użyciu powiązania danych w języku XAML w celu synchronizowania interfejsu użytkownika i danych, co zwiększa łatwość konserwacji i zmniejsza zależności.

Ponieważ zapewnia luźne sprzężenie, użycie powiązania danych zmniejsza twarde zależności między różnymi rodzajami kodu. Takie podejście ułatwia zmianę poszczególnych jednostek kodu (metod, klas, kontrolki itd.) bez powodowania niezamierzonych skutków ubocznych w innych jednostkach. To oddzielenie jest przykładem rozdzielenia problemów, co jest ważnym pojęciem w wielu wzorcach projektowych.

Zalety MVVM

Oddzielenie kodu niesie ze sobą wiele korzyści, w tym:

  • Włączanie iteracyjnego, eksploracyjnego stylu kodowania. Zmiana, która jest izolowana, jest mniej ryzykowna i łatwiejsza do eksperymentowania.
  • Upraszczanie testów jednostkowych. Możesz przetestować jednostki kodu, które są odizolowane od siebie indywidualnie i poza środowiskami produkcyjnymi.
  • Wspieranie kolaboracji zespołowej. Oddzielne osoby lub zespoły mogą opracowywać oddzielony kod, który jest zgodny z dobrze zaprojektowanymi interfejsami i zintegrować go później.
  • Poprawa łatwości utrzymania. Naprawianie usterek w kodzie oddzielonym jest mniej prawdopodobne, że spowoduje regresję w innym kodzie.

W przeciwieństwie do MVVM, aplikacja z bardziej konwencjonalną strukturą "code-behind" zwykle używa wiązania danych dla danych tylko do wyświetlania. Reaguje na dane wejściowe użytkownika, bezpośrednio obsługując zdarzenia uwidocznione przez kontrolki. Programy obsługi zdarzeń są implementowane w plikach za pomocą kodu (takich jak MainWindow.xaml.cs) i są często ściśle powiązane z kontrolkami. Zazwyczaj zawierają kod, który bezpośrednio manipuluje interfejsem użytkownika. Ta struktura sprawia, że zastąpienie kontrolki jest trudne lub niemożliwe bez konieczności aktualizowania kodu obsługi zdarzeń. Dzięki tej architekturze pliki z kodem-behind często gromadzą kod, który nie jest bezpośrednio związany z interfejsem użytkownika, na przykład kod dostępu do bazy danych, który często bywa duplikowany i modyfikowany do użycia z innymi oknami.

Warstwy aplikacji

W przypadku korzystania ze wzorca MVVM podziel aplikację na następujące warstwy:

  • Warstwa modelu definiuje typy reprezentujące dane biznesowe. Ta warstwa zawiera wszystkie elementy wymagane do modelowania podstawowej domeny aplikacji i często obejmuje podstawową logikę aplikacji. Ta warstwa jest całkowicie niezależna od warstw widoku i modelu widoku i często znajduje się częściowo w chmurze. Biorąc pod uwagę w pełni zaimplementowaną warstwę modelu, można utworzyć wiele różnych aplikacji klienckich w przypadku wybrania, takich jak zestaw SDK aplikacji systemu Windows i aplikacje internetowe, które współpracują z tymi samymi danymi bazowymi.
  • Warstwa widoku definiuje interfejs użytkownika przy użyciu znaczników XAML. Znacznik zawiera wyrażenia powiązań danych (takie jak x:Bind), które definiują połączenie między określonymi składnikami interfejsu użytkownika i różnymi elementami składowymi modelu widoku i modelu. Czasami można użyć plików code-behind jako części warstwy widoku, aby zawierać dodatkowy kod potrzebny do dostosowania lub manipulacji interfejsem użytkownika albo do wyodrębniania danych z argumentów procedury obsługi zdarzeń przed wywołaniem metody modelu widoku, która wykonuje pracę.
  • Warstwa model-widok udostępnia cele powiązań danych dla widoku. W wielu przypadkach model-widok udostępnia model bezpośrednio lub zawiera elementy, które obejmują określone człony modelu. Model widoków może również definiować członków do śledzenia danych istotnych dla interfejsu użytkownika, ale nie dla modelu, na przykład kolejności wyświetlania listy elementów. Model widoków służy również jako punkt integracji z innymi usługami, takimi jak kod dostępu do danych. W przypadku prostych projektów może nie być potrzebna oddzielna warstwa modelu, ale tylko model widoków, który hermetyzuje wszystkie potrzebne dane.

Podstawowa i zaawansowana maszyna wirtualna MVVM

Podobnie jak w przypadku każdego wzorca projektowego, istnieje więcej niż jeden sposób implementacji MVVM, a wiele różnych technik jest uznawanych za część MVVM. Z tego powodu istnieje kilka różnych platform MVVM innych firm obsługujących różne platformy oparte na języku XAML, w tym zestaw SDK aplikacji systemu Windows. Jednak te struktury zwykle obejmują wiele usług do implementowania architektury oddzielonej, dzięki czemu dokładna definicja MVVM jest nieco niejednoznaczna.

Chociaż zaawansowane platformy MVVM mogą być bardzo przydatne, zwłaszcza w przypadku projektów w skali przedsiębiorstwa, zazwyczaj wiąże się to z przyjęciem dowolnego konkretnego wzorca lub techniki, a korzyści nie zawsze są jasne, w zależności od skali i rozmiaru projektu. Na szczęście można przyjąć tylko te techniki, które zapewniają wyraźną i namacalną korzyść, i ignorować inne, dopóki ich nie potrzebujesz.

W szczególności możesz uzyskać wiele korzyści, po prostu rozumiejąc i stosując pełną moc powiązania danych i oddzielając logikę aplikacji do opisanych wcześniej warstw. Można to osiągnąć przy użyciu tylko funkcji udostępnianych przez zestaw SDK aplikacji systemu Windows i bez używania żadnych struktur zewnętrznych. W szczególności rozszerzenie znaczników {x:Bind} sprawia, że powiązanie danych jest łatwiejsze i działa wydajniej niż w poprzednich platformach XAML, eliminując potrzebę dużej ilości wymaganego wcześniej kodu szablonowego.

Aby uzyskać dodatkowe wskazówki dotyczące korzystania z podstawowego, gotowego do użycia wzorca MVVM, zapoznaj się z przykładem UWP dotyczącego bazy danych zamówień klientów na GitHub. Wiele innych przykładów aplikacji platformy UWP również korzysta z podstawowej architektury MVVM, a przykład aplikacji Ruch Drogowy dla platformy UWP zawiera zarówno wersję z kodem za kulisami, jak i wersję MVVM, z notatkami opisującymi konwersję MVVM.

Zobacz także

Tematy

Szczegółowe powiązanie danych
Rozszerzenie znaczników {x:Bind}

Przykłady maszyn wirtualnych MVVM platformy UWP

Przykład bazy danych zamówień klientów
Przykład vanArsdel Inventory
Przykład aplikacji ruchu