MVVMCROSS ułatwia rozdzielenie obaw w aplikacjach międzyplatformowych poprzez wdrożenie wzoru modelu-View-ViewModel (MVVM), który z natury promuje wyraźny podział obowiązków między różnymi elementami aplikacji. Oto, jak to osiągnie Mvvmcross:
MVVM Wzorność wzorca
MVVMCROSS jest zbudowany wokół architektury MVVM, która składa się z trzech głównych elementów:
- Model: Reprezentuje dane i logikę biznesową aplikacji. Udostępnia struktury danych i operacje, które są niezależne od interfejsu użytkownika.
- Widok: Obsługuje interfejs użytkownika i interakcje użytkownika. Jest odpowiedzialny za wyświetlanie danych i odbieranie danych wejściowych od użytkownika.
- ViewModel: działa jako pośrednik między modelem a widokiem. Ujawnia dane i polecenia, z którymi widok może wiązać, skutecznie oddzielając widok od modelu.
Utrzymując tę separację, MVVMCROSS zapewnia, że każdy składnik koncentruje się na swojej specyficznej roli bez nakładających się obowiązków. Na przykład widok nie powinien zawierać logiki biznesowej, a ViewModel nie powinien bezpośrednio manipulować elementami interfejsu użytkownika.
Portable Class Library (PCL) dla udostępnionej logiki
MVVMCROSS korzysta z przenośnej biblioteki klas (PCL) do pomieszczeń ViewModels, modeli i interfejsów dla usług specyficznych dla platformy. Ten PCL służy jako podstawowy projekt, zawierający wspólną logikę biznesową i obsługę bazy danych. Oddzielając logikę biznesową na PCL, MVVMCROSS pozwala programistom dzielić znaczną część kodu na różnych platformach, takich jak iOS, Android i Windows. Takie podejście nie tylko ułatwia ponowne użycie kodu, ale także zapewnia, że logika biznesowa pozostaje spójna na różnych platformach.
wiązanie danych i komunikacja
MVVMCROSS wykorzystuje powiązanie danych w celu połączenia z odpowiednimi widzenia. Ten mechanizm pozwala widokowi automatycznie aktualizować, gdy zmienia się ViewModel i odwrotnie. Wiązanie danych ma kluczowe znaczenie dla utrzymania rozdzielenia obaw, ponieważ umożliwia poglądowi reakcji na zmiany w ViewModel bez konieczności poznania szczegółów wdrożenia logiki biznesowej.
Ponadto MVVMCROSS obsługuje różne techniki komunikacji, takie jak polecenia i zdarzenia, które dodatkowo zwiększają rozdzielenie obaw, umożliwiając poglądowi wywoływanie działań na temat ViewModel bez bezpośredniego dostępu do jego stanu wewnętrznego.
Wtrysku zależności i architektura wtyczek
MVVMCROSS zawiera wtrysk zależności (DI) i architekturę wtyczek do zarządzania zależnościami i rozszerzania możliwości frameworka. Wtrysk zależności pomaga zapewnić luźno sprzężenie komponentów, co ułatwia testowanie i utrzymanie zastosowania. Architektura wtyczek pozwala programistom dodawać nowe funkcje bez zmiany podstawowych ram, utrzymując w ten sposób czyste rozdzielenie obaw.
Zarządzanie cyklem życia
MVVMCROSS zapewnia funkcje zarządzania cyklem życia dla ViewModels, które są powiązane z cyklem życia widoków. Oznacza to, że ViewModels można powiadomić, gdy widok jest utworzony, pojawia się, znika lub zostanie zniszczony. Takie zarządzanie cyklem życia pomaga w utrzymaniu czystego rozdziału obaw poprzez zapewnienie właściwego czyszczenia zasobów i że stan ViewModel jest prawidłowo zarządzany.
Podsumowując, MVVMCROSS ułatwia rozdzielenie obaw w aplikacjach międzyplatformowych poprzez egzekwowanie wzorca MVVM, przy użyciu PCL do wspólnej logiki, wdrażanie wiązania danych oraz uwzględniając wstrzyknięcie zależności i zarządzanie cyklem życia. Funkcje te łącznie przyczyniają się do solidnej, możliwej do utrzymania i skalowalnej architektury aplikacji.
Cytaty:[1] https://www.linkedin.com/advice/0/what-best-way-ensure-separation-concerns-mvvm-design-csadc
[2] https://leaware.com/creating-cross-platform-xamarin-applications-using-the-mvvmcross-framework/
[3] https://visualstudiomagazine.com/articles/2018/05/08/build-a-xamarin.forms-application.aspx
[4] https://learn.microsoft.com/en-us/archive/msdn-magazine/2014/august/windows-phone-build-mvvm-apps-with-xamarin-and-mvvmcross
[5] https://www.mvvmcross.com/documentation/fundamentals/viewmodel-lifecycle
[6] https://www.mvvmcross.com/documentation/getting-started/getting-started
[7] https://www.mvvmcross.com/documentation/fundamentals/data-binding
[8] https://stackoverflow.com/questions/32220007/what-does-mvvmcross-do-that-xamarin-doesnt-already
[9] https://github.com/mvvmcross/mvvmcross