MVVMCROSS er et rammer på tværs af platform, der letter udviklingen af applikationer ved hjælp af Model-View-ViewModel (MVVM) mønster. Det giver udviklere mulighed for at skabe løst koblede, vedligeholdelige og testbare mobile løsninger ved at adskille applikationslogikken i to hoveddele: kerneprojektet og UI -projektet.
Core Project
Kerneprojektet er typisk et .NET -standardbibliotek, der indeholder al den delte kode, herunder:- ViewModels: Disse er ansvarlige for at håndtere brugerinteraktioner og forretningslogik.
- Modeller: Repræsenter de datastrukturer, der bruges i hele applikationen.
- Tjenester: Giv adgang til data, webtjenester eller andre eksterne ressourcer.
- Konvertere: Bruges til konverteringer af datatype.
- APP -klasse: Dette er ansvarlig for at initialisere applikationens forretningslogik og visningsmodeller. Den håndterer også registrering af brugerdefinerede objekter i inversionen af kontrol (IOC) container.
- AppStart: Valgfrit brugt til at bestemme, hvilken visningsmodel der skal præsenteres først, når applikationen starter.
UI -projekt
UI-projektet er platformspecifikt og indeholder brugergrænsefladeelementer og platformspecifik kode. For hver målplatform (f.eks. IOS, Android) er der et separat UI -projekt. Disse projekter inkluderer:- Synspunkter: Hver visning er ansvarlig for at præsentere en tilsvarende visningsmodel. Visninger er designet ved hjælp af native platformværktøjer (f.eks. XAML for Xamarin.Forms, AXML til Android).
- Native Application Handler: Dette håndterer indfødte livscyklusbegivenheder. For eksempel på Android ville det være en 'MainActivity' eller 'MainApplication' klasse, mens det på iOS ville være en 'AppDelegate' klasse.
- Opsætningsklasse: Dette er ansvarlig for bootstrapping mvvmcross og registrering af platformspecifikke tjenester. Det initialiserer MVVMCROSS-rammen og indstiller IOC-beholderen med platformspecifikke implementeringer.
Interaktion mellem kerne- og UI -projekter
Interaktionen mellem kerne- og UI -projekterne i MVVMCROSS lettes af MVVM -mønsteret og rammerens IOC -container. Sådan interagerer de:- ViewModel -binding: UI -projekterne bruger MVVMCross til at binde visninger for at se modeller. Dette gøres typisk ved hjælp af en navnekonvention eller ved at dekorere visninger med attributter som `[mvxviewfor (typeof (HomEviewModel))]`.
- Serviceinjektion: Kerneprojektet definerer grænseflader til tjenester, der implementeres forskelligt på hver platform. Disse tjenester er registreret i IOC-beholderen og injiceres i visningsmodeller, hvilket giver mulighed for platformspecifik funktionalitet uden at duplikere kode.
- Navigation og præsentation: MVVMCROSS giver mekanismer til at navigere mellem visningsmodeller og præsentere visninger. Rammerne bruger præsentanter (f.eks. `IMVXIOSViewPresenter`,` IMVXanDoidViewPresenter`) til at styre, hvordan visninger vises på hver platform.
Ved at adskille applikationslogikken i kerne- og UI-projekter gør MVVMCROSS-muligheder for at maksimere genbrug af kode på tværs af platforme, mens de stadig giver mulighed for platformspecifik tilpasning og optimering [1] [3] [5].
Citater:[1] https://www.mvvmcross.com/documentation/getting-started/mvvmcross-overview
[2] https://canbilgin.wordpress.com/tag/mvvmcross/
)
[4] https://www.mvvmcross.com/documentation/advanced/customizing-sising-app-and-setup
[5] https://www.suneco.nl/blogs/boost-your-xamarin-native-projects-with-mvvmcross/
[6] https://learn.microsoft.com/en-us/archive/msdn-magazine/2014/august/windows-thone-build-mvvm-apps-with-xamarin-and-mvvmcross
[7] https://www.mvvmcross.com/documentation/tutorials/tipcalc/the-core-project
[8] https://canbilgin.wordpress.com/2017/03/26/xamarin-forms-application-with-mvvmcross/