Beskriva .NET MAUI-arkitekturen
Ett vanligt mönster som används för plattformsoberoende apputveckling är att ta hänsyn till affärslogik från användargränssnittet och sedan utveckla separata användargränssnitt och användargränssnittslogik för varje plattform. Affärslogik förblir oförändrad för varje typ av enhet, men koden som kör appen och visar data kan variera. Den här variansen beror på de olika funktionerna, API:erna och funktionerna som enheterna tillhandahåller. Att skapa en multiplatform-app på det här sättet innebär att hantera inte bara separata SDK:er (Software Development Kit), utan helt olika språk och verktygsuppsättningar.
Syftet med .NET MAUI (Multi-Platform Application User Interface) är att förenkla apputveckling med flera plattformar. Med hjälp av .NET MAUI skapar du appar med flera plattformar med ett enda projekt, men du kan lägga till plattformsspecifik källkod och resurser om det behövs. Huvudsyftet med .NET MAUI är att du ska kunna implementera så mycket av din programlogik och användargränssnittslayout som möjligt i en enda kodbas.
I den här lektionen får du lära dig mer om .NET MAUI-arkitekturen och de verktyg som krävs för att skapa .NET MAUI-program.
Vad är .NET MAUI-teknikstacken?
.NET tillhandahåller en serie plattformsspecifika ramverk för att skapa appar: .NET för Android, .NET för iOS (och iPadOS), .NET för Mac och WinUI 3 (med hjälp av SDK för Windows-appar). Dessa ramverk har alla åtkomst till samma .NET 6 Base Class Library (BCL). Det här biblioteket innehåller funktioner för att skapa och hantera resurser och för att generellt abstrahera information om den underliggande enheten bort från koden. BCL:n är beroende av .NET-körningen för att tillhandahålla körningsmiljön för koden. Mono, en implementering med öppen källkod av .NET-körningen, implementerar Android-, iOS- (och iPadOS) och macOS-miljöer. I Windows utför Win32 samma roll, förutom att den är optimerad för Windows-plattformen.
BCL gör det möjligt för program som körs på olika typer av enheter att dela gemensam affärslogik, men de olika plattformarna har olika sätt att definiera ett programs användargränssnitt. Plattformarna tillhandahåller olika modeller för att ange hur användargränssnittselementen kommunicerar och samverkar. Du kan skapa användargränssnittet för varje plattform separat med hjälp av lämpligt plattformsspecifikt ramverk (.NET för Android, .NET för iOS, .NET för Mac eller WinUI 3). Men den här metoden kräver att du underhåller en kodbas för varje enskild enhetsfamilj. .NET MAUI tillhandahåller ett enda ramverk för att skapa UIs för mobil- och skrivbordsprogram. Du skapar användargränssnittet med det här ramverket (som anges av Pil 1 i följande diagram) och .NET MAUI tar hand om att konvertera det till rätt plattform (Pil 2).
Det kan finnas tillfällen då du behöver implementera en plattformsspecifik funktion. I dessa situationer kan du anropa metoder i det plattformsspecifika ramverket, enligt pil 3 i följande diagram.
Hur fungerar .NET MAUI?
.NET MAUI abstraherar implementeringen av ett gränssnittselement från den logiska beskrivningen. Du kan beskriva användargränssnittet med XAML (Extensible Application Markup Language), ett plattformsneutralt språk baserat på XML. Följande XAML-fragment visar till exempel beskrivningen av en knappkontroll:
<Button Text="Click me"
SemanticProperties.Hint="Counts the number of times you click"
Clicked="OnCounterClicked"
HorizontalOptions="Center" />
Det här exemplet definierar etiketten för knappen ("Klicka på mig") och anger att en metod med namnet OnCounterClicked
ska köras när användaren väljer knappen. Andra egenskaper kan ändra layouten för knappen och texten. I det här exemplet centreras texten på knappen. Semantiska egenskaper ger stöd för hjälpmedel för användare med nedsatt syn.
.NET MAUI genererar alltid intern kod för målenheten, så att du får optimal prestanda. .NET MAUI använder hanterare som är specifika för varje plattforms- och användargränssnittselement för att utföra en åtgärd. Om du till exempel riktar in dig på iOS för appen mappar en .NET MAUI-hanterare den här koden till en iOS UIButton
. Om du kör på Android får du en Android AppCompatButton. Dessa hanterare nås indirekt via ett kontrollspecifikt gränssnitt som tillhandahålls av .NET MAUI, till exempel IButton
för en knapp.
Kommentar
Om du vill kan du också skapa användargränssnittet dynamiskt med hjälp av C#-kod. Med den här metoden kan du ändra layouten enligt miljön. Du kanske till exempel inte vill att vissa kontroller ska visas om användaren inte har en lämplig auktoriseringsnivå.
.NET MAUI gör det enkelt att komma åt vanliga kontroller, till exempel knappar. Andra vanliga kontroller, till exempel textinmatningsfält, etiketter och datumväljare, är lika enkla. Enskilda kontroller räcker dock inte för att skapa en bra plattform för att skapa omfattande appar. .NET MAUI tillhandahåller också:
- En utarbetad layoutmotor för att utforma sidor.
- Flera sidtyper för att skapa omfattande navigeringstyper, till exempel lådor.
- Stöd för databindning för mer eleganta och underhållsbara utvecklingsmönster.
- Möjligheten att skapa anpassade hanterare för att förbättra hur gränssnittselement presenteras.
- Åtkomst till interna API:er direkt och en abstraktion av många vanliga behov av mobilappar och skrivbordsappar som är separata från användargränssnittet. Essentials-biblioteket gör det möjligt för en app att komma åt saker som GPS, accelerometer och batteri- och nätverkstillstånd. Det finns dussintals sensorer och tjänster som är gemensamma för mobil utveckling som också är tillgängliga via det här biblioteket.