Szczęśliwe małżeństwo. Xamarin i MvvmCross

Ta dwójka niesamowicie dobrze ze sobą współpracuje. Używając MvvmCross w projekcie Xamarin można powiedzieć, że w proces tworzenia aplikacji wygląda kompletnie inaczej, aniżeli w typowym podejściu Xamarin. To co musielibyśmy tworzyć samodzielnie w tradycyjnym podejściu Xamarin, staje się komponentem do użycia w MvvmCross. Mam tu na myśli nawigację w aplikacji, data binding, mechanizm wysyłki zdarzeń (MvxMessenger). 

MvvmCross jest frameworkiem kompletnym, ciągle rozwijanym, bogatym w najróżniejsze narzędzia pozwalające niesamowicie wydajnie tworzyć aplikacje cross-platform Xamarin. Oczywiście w tym wszystkim posiada masę błędów, ale dobra wiadomość jest taka, że nad ich poprawą czuwa duża społeczność oraz sami twórcy. Nowe wersje ciągle powstają, a aktualna wersja na moment pisania artykułu to 6.3.1

Co sprawia, że tak dobrze to działa?

Są to założenia, którymi kierowali się twórcy podczas tworzenia tego narzędzia. Aby odpowiedzieć na pytanie zadane w nagłówku, należy przypomnieć, że typowa aplikacja Xamarin świetnie współpracuje ze wzorcem MVVM. Podział na widok, jego model widoku oraz warstwę modelu świetnie odseparowuje poszczególne zależności. Jako bazę MvvmCross wykorzystuje właśnie ten wzorzec oraz szczególnie jego założenia. 

Moim zdaniem spoiwem, które łączy wszystkie funkcjonalności w tym frameworku jest model widoku. Załóżmy, że tworzymy aplikację na dwie platformy docelowe iOS i Android oraz posiadamy jeden hipotetyczny widok. Korzystając z MvvmCross, musimy połączyć każdy z widoków z modelem widoku za pomocą odpowiedniego mechanizmu. Daje nam to szereg możliwości:

  • dane udostępniane w modelu widoku, możemy połączyć z widokiem dzięki mechanizmowi data bindingu, który jest dostępny do użycia w frameworku,
  • połączenie widok – model widoku, pozwala na wykorzystanie mechanizmu nawigacji w aplikacji. Model widoku staje się wtedy poniekąd identyfikatorem widoku, do którego chcemy się nawigować. Szczególnie istotne jest to, że możemy nawigować się bezpośrednio z warstwy wspólnej (Core), a dodatkowym atutem jest możliwość przekazania oraz odbierania danych z nawigacji nie przejmując się implementacją platformową,
  • pozwoli na działanie tzw. prezenterów, czyli mechanizmowi dzięki, któremu połączenie model widok – widok w ogóle działa. Prezentery zarządzają widokami oraz posiadają swoje oddzielne implementacje per platforma. Udostępniają jednolity interfejs do rotacji widokami, który to jest wykorzystywany m.in. w mechanizmie nawigacji. Interfejs ten jest potrzebny ze względu na odmienny sposób zarządzania widokami na obu platformach,
  • w modelu widoku dostępne są metody, które odzwierciedlają cykl życia widoku. Możemy z nich korzystać, aby odpowiednio reagować kiedy widok zostanie pokazany lub kiedy właśnie zniknął.
  • jednym z ciekawych zastosowań prezenterów jest możliwość zdefiniowania w jaki sposób chcemy wyświetlić widok(definiujemy to oddzielnie dla każdego widoku). Tym sposobem możemy zdefiniować np., że nasze dwa dostępne widoki mają być dostępne jako dwie możliwe zakładki w kontrolce ViewPager lub SegmentedControl. Wystarczy dodanie odpowiedniego zachowania w prezenterze lub skorzystanie z jednego z już zdefiniowanych atrybutów służących do tego celu.

 

Model widoku to główny rozgrywający

Jak widzisz, aby rozmawiać z widokiem wystarczy nam model widoku. MvvmCross zajmie się resztą. Warto zaznaczyć, że do projektu możemy dodać wiele dostępnych pluginów, które rozszerzają możliwości MvvmCross. Najważniejszym jest Messenger, który pozwala wysyłać wiadomości w całym systemie na zasadach opartych o subskrypcję. Świetnie się on sprawdza do informowania innej części systemu o zdarzeniu nie mając do niej dostępu(referencji). W zasadzie większość pluginów straciła już na znaczeniu od momentu pojawienia się Xamarin.Essentials czyli biblioteki, która zawiera gotowe do wykorzystania mechanizmy takie jak: udostępnianie danych, wibracje, wysyłka maili, informacje o baterii itp..

Byłbym zapomniał o własnym kontenerze IoC oraz wbudowanemu mechanizmowi dependency injection. Jedno i drugie działa dobrze i nie spotkałem się z sytuacją, kiedy mnie zawiodło. 

MvvmCross nie ogranicza programisty

MvvmCross w żadnym stopniu nie ogranicza programisty, zawiera dużą paczkę gotowych do użycia komponentów, które można we własnym zakresie rozszerzać i dostosowywać do własnych potrzeb. Jest on pomyślany tak, aby typowe mechanizmy i zachowania, które każda aplikacja mobilna posiadać musi, były do wykorzystania. I w pełni się z tym zgadzam. Świetnie się pracuje z tym narzędziem i po napisaniu kilku aplikacji przy jego użyciu uważam, że powinien być naturalnym wyborem przy tworzeniu każdej większej aplikacji Xamarin. 

Chcesz więcej?

Chciałbyś poznać lepiej MvvmCross i stworzyć aplikację przy użyciu Xamarin? Tak się składa, że razem z Bartkiem Radlakiem uruchomiliśmy przedsprzedaż naszego kursu Programista Xamarin. Przedstawimy tam kompletny proces tworzenia aplikacji cross-platform przy użyciu Xamarin. I to przy użyciu Xamarin.Native oraz Xamarin.Forms. Jeżeli jesteś zainteresowany, zapraszam Cię na stronę naszego kursu po więcej informacji. 

https://www.kurs-xamarin.pl

Mam coś dla Ciebie

Zapisz się do mojego newslettera, a ja prześlę Ci zbiór kilkunastu praktycznych wskazówek dla programisty aplikacji mobilnych.

Menu