MVVMCROSS letter adskillelsen af bekymringer i tværplatform-apps ved at implementere model-view-viewmodel (MVVM) mønster, der i sagens natur fremmer en klar afdeling af ansvarsområder mellem forskellige komponenter i en applikation. Sådan opnår MVVMCross dette:
MVVM -mønsterimplementering
MVVMCROSS er bygget omkring MVVM -arkitekturen, der består af tre hovedkomponenter:
- Model: repræsenterer applikationens data og forretningslogik. Det indkapsler datastrukturer og -operationer, der er uafhængige af brugergrænsefladen.
- Vis: Håndterer brugergrænsefladen og brugerinteraktioner. Det er ansvarlig for at vise data og modtage input fra brugeren.
- ViewModel: fungerer som en formidler mellem modellen og udsigten. Det afslører data og kommandoer, som visningen kan binde til, effektivt afkoble visningen fra modellen.
Ved at opretholde denne adskillelse sikrer MVVMCROSS, at hver komponent fokuserer på dens specifikke rolle uden overlappende ansvar. For eksempel skal visningen ikke indeholde forretningslogik, og ViewModel bør ikke direkte manipulere UI -elementer.
Portable Class Library (PCL) til delt logik
MVVMCROSS bruger et bærbart klassebibliotek (PCL) til at huse ViewModels, Models og grænseflader til platformspecifikke tjenester. Denne PCL fungerer som kerneprojektet, der indeholder den delte forretningslogik og databasehåndtering. Ved at adskille forretningslogikken i en PCL giver MVVMCROSS udviklere mulighed for at dele en betydelig del af koden på tværs af forskellige platforme, såsom iOS, Android og Windows. Denne tilgang letter ikke kun genbrug af kode, men sikrer også, at forretningslogikken forbliver konsistent på tværs af platforme.
Databinding og kommunikation
MVVMCROSS anvender databinding til at forbinde visninger med deres tilsvarende ViewModels. Denne mekanisme giver visningen mulighed for automatisk at opdatere, når ViewModel ændres, og omvendt. Databinding er afgørende for at opretholde adskillelse af bekymringer, fordi det gør det muligt for synspunktet at reagere på ændringer i ViewModel uden at skulle kende implementeringsdetaljerne for forretningslogikken.
Derudover understøtter MVVMCROSS forskellige kommunikationsteknikker, såsom kommandoer og begivenheder, som yderligere forbedrer adskillelsen af bekymringer ved at lade synet påkalde handlinger på ViewModel uden direkte adgang til dens interne tilstand.
Afhængighedsinjektion og pluginarkitektur
MVVMCROSS inkorporerer afhængighedsinjektion (DI) og en plugin -arkitektur til at styre afhængigheder og udvide rammens kapaciteter. Afhængighedsinjektion hjælper med at sikre, at komponenter løst kobles, hvilket gør det lettere at teste og vedligeholde applikationen. Plugin -arkitekturen giver udviklere mulighed for at tilføje nye funktionaliteter uden at ændre kernerammen og derved opretholde en ren adskillelse af bekymringer.
Livscyklusstyring
MVVMCROSS leverer livscyklusstyringsfunktioner til ViewModels, som er bundet til livscyklussen for visningerne. Dette betyder, at ViewModels kan underrettes, når visningen oprettes, vises, forsvinder eller ødelægges. En sådan livscyklusstyring hjælper med at opretholde en ren adskillelse af bekymringer ved at sikre, at ressourcer renses korrekt, og at ViewModel's stat styres korrekt.
Sammenfattende letter MVVMCROSS adskillelse af bekymringer i tværplatform-apps ved at håndhæve MVVM-mønsteret ved hjælp af en PCL til delt logik, implementere databinding og inkorporere afhængighedsinjektion og livscyklusstyring. Disse funktioner bidrager samlet til en robust, vedligeholdelig og skalerbar applikationsarkitektur.
Citater:[1] https://www.linkedin.com/advice/0/what-best-way-enure-separation-concerns-mvvm-design-csadc
)
[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-thone-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- allerede
[9] https://github.com/mvvmcross/mvvmcross