Wzorzec MVVM – Koncepcja

Artykuł jest aktualny

Dbam o aktualność moich najpopularniejszych artykułów, abyś otrzymał/a najwyższej jakości wiedzę.
~ 2020

Wzorca MVVM używam w projekcie, który rozwijam w ramach konkursu “Daj Się Poznać“. Dlatego postanowiłem, że zrobię z tego tematu serię artykułów. W tym wpisie, zależy mi na przedstawieniu koncepcji tego wzorca, natomiast w kolejnych pokażę jak za pomocą narzędzia MVVM Toolkit ułatwić sobie jego implementację w projekcie WPF oraz opiszę korzyści wynikające z jego korzystania. Należy pamiętać, że sam wzorzec będę opisywał w kontekście platformy WPF oraz mechanizmów, które udostępnia do łatwiejszej jego implementacji.

Koncepcja wzorca MVVM

Wzorzec Model-View-ViewModel (MVVM), opiera się na wydzieleniu odpowiednich warstw w systemie, w celu podziału zadań oraz zmniejszenia zależności pomiędzy klasami. Mamy więc klasy modelu danych, których zadaniem jest przechowywanie danych właśnie oraz ich ewentualną walidację. Klasy tej warstwy powinny być jak najprostsze pod względem budowy. Pod żadnym pozorem nie mogą odwoływać się do warstwy modelu widoku a tym bardziej do samego widoku.

Poniżej znajduję się diagram, który przedstawia sposób komunikacji pomiędzy poszczególnymi warstwami:

Widok

Warstwa widoku zawiera interfejs użytkownika (UI) i jest odpowiedzialna na kontakt oraz interakcję z użytkownikiem. W WPF, za warstwę widoku będzie odpowiedzialny kod XAML. Szczególnie związany z kodem XAML jest tzw. code-behind. Możemy o nim myśleć jak zapleczu kodu XAML, a jego zadanie jest podobne do klas obsługujących metody zdarzeniowe w Windows Forms. Zgodnie z koncepcją MVVM kod ten powinien być ograniczony do minimum.

Model

Warstwa widoku komunikuje się z warstwą modelu widoku za pomocą komend oraz wiązania danych (data binding). Jeżeli tworzyłeś aplikacje w Windows Forms, o komendach możesz myśleć jak o metodach zdarzeniowych podpiętych do poszczególnych kontrolek w definicji widoku. Natomiast wiązanie danych polega na odwoływaniu się do właściwości podpiętego modelu widoku jako źródła danych. Jest to świetny mechanizm, którego korzyści oraz działanie przestawię w następnych postach.

Model widoku

Spoiwem, które łączy model oraz widok jest warstwa modelu widoku. Jej zadaniem jej udostępnienie danych dla widoku oraz wymianę informacji z modelem. Przez wymianę informacji należy rozumieć pobieranie danych z modelu oraz jego aktualizację. Podczas implementacji tej warstwy bardzo ważną kwestią jest poprawna aktualizacja danych. Nie może wystąpić sytuacja, kiedy model dysponuje nieaktualnymi danymi w stosunku do widoku lub na odwrót. Aby sobie z tym poradzić, należy skorzystać z interfejsu INotifyPropertyChanged, jego zadaniem zgodnie z nazwą jest powiadamianie o zmianach.

Bardzo często w modelu widoku przechowuje się referencję do modelu jako prywatne pole klasy a poszczególne właściwości składające się na model, są udostępniane jako publiczne właściwości w modelu widoku, z których wtedy korzysta widok.

Ten wpis miał na celu pokrótce przedstawić koncepcję wzorca MVVM. W kolejnym wpisie przedstawię MVVM Toolkit, które jak znacząco usprawnia tworzenie aplikacji.

Newsletter

Zapisz się do mojego newslettera, aby nie przegapić nowych postów.

Dodatkowo wyślę Ci darmowego ebooka mojego autorstwa zawierającego mnóstwo wskazówek dla programisty aplikacji mobilnych.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

Wypełnij to pole
Wypełnij to pole
Proszę wprowadzić prawidłowy adres email.
You need to agree with the terms to proceed

Menu