Descrivere l'architettura .NET MAUI
Un modello comune usato per lo sviluppo di app multipiattaforma è quello di considerare la logica di business dell'interfaccia utente e quindi sviluppare interfacce utente e logica dell'interfaccia utente distinte per ogni piattaforma. Anche se la logica di business resta invariata per ogni tipo di dispositivo, il codice su cui si basa l'app e che presenta i dati può variare. Questa variazione è dovuta alle diverse caratteristiche, API e funzionalità offerte dai dispositivi. Creare un'app multipiattaforma secondo queste modalità significa gestire non solo Kit di sviluppo software separati, ma anche linguaggi e set di strumenti completamente diversi.
Lo scopo di .NET MAUI (Interfaccia utente dell'applicazione multipiattaforma) è semplificare lo sviluppo di app multipiattaforma. Usando .NET MAUI, è possibile creare app multipiattaforma sulla base di un unico progetto, con la possibilità di aggiungere risorse e codice sorgente specifici della piattaforma in caso di necessità. L'obiettivo principale di .NET MAUI è consentire all'utente di implementare quanta più logica dell'applicazione e quanto più layout dell'interfaccia utente possibile in un'unica codebase.
In questa unità verranno fornite informazioni sull'architettura di .NET MAUI e sugli strumenti necessari per creare applicazioni .NET MAUI.
Che cos'è lo stack di tecnologie .NET MAUI?
.NET offre una serie di framework specifici della piattaforma per la creazione di app: .NET per Android, .NET per iOS (e iPadOS), .NET per Mac e WinUI 3 (usando l'SDK per app di Windows). Tutti questi framework hanno accesso alla stessa libreria di classi base (BCL) di .NET 6. Questa libreria offre funzionalità per la creazione e la gestione di risorse e per l'astrazione in generale dei dettagli del dispositivo sottostante dal codice. La libreria di classi base dipende dal runtime .NET per fornire l'ambiente di esecuzione per il codice. Mono, un'implementazione open source del runtime .NET, implementa gli ambienti Android, iOS (e iPadOS) e macOS. In Windows Win32 svolge lo stesso ruolo, con la differenza che è ottimizzato per la piattaforma Windows.
Mentre la libreria di classi base consente alle applicazioni in esecuzione in diversi tipi di dispositivi di condividere la logica di business comune, le varie piattaforme hanno diversi modi per definire l'interfaccia utente per un'applicazione. Le piattaforme forniscono modelli variabili per specificare il modo in cui gli elementi di un'interfaccia utente comunicano e operano tra loro. È possibile creare l'interfaccia utente per ogni piattaforma separatamente usando il framework specifico della piattaforma appropriato (.NET per Android, .NET per iOS, .NET per Mac o WinUI 3). Questo approccio richiede tuttavia di mantenere una codebase per ogni singola famiglia di dispositivi. .NET MAUI offre un unico framework per la creazione di interfacce utente per applicazioni desktop e per dispositivi mobili. L'interfaccia utente viene creata usando questo framework (indicato dalla freccia 1 nel diagramma seguente) e .NET MAUI si occupa di convertirla nella piattaforma appropriata (freccia 2).
In alcuni casi potrebbe essere necessario implementare una funzionalità specifica della piattaforma. In queste situazioni è possibile richiamare metodi nel framework specifico della piattaforma, come evidenziato dalla freccia 3 nel diagramma seguente.
Come funziona .NET MAUI?
.NET MAUI astrae l'implementazione di un elemento dell'interfaccia utente dalla descrizione logica corrispondente. È possibile descrivere l'interfaccia utente usando XAML (Extensible Application Markup Language), un linguaggio indipendente dalla piattaforma basato su XML. Ad esempio, il frammento XAML seguente mostra la descrizione di un pulsante:
<Button Text="Click me"
SemanticProperties.Hint="Counts the number of times you click"
Clicked="OnCounterClicked"
HorizontalOptions="Center" />
Questo esempio definisce l'etichetta per il pulsante ("Click me") e specifica che deve essere eseguito un metodo denominato OnCounterClicked
quando l'utente seleziona il pulsante. Altre proprietà possono modificare il layout del pulsante e il testo; in questo esempio il testo è centrato sul pulsante. Le proprietà semantiche forniscono supporto per l'accessibilità, per utenti con problemi di vista.
.NET MAUI genera sempre codice nativo per il dispositivo di destinazione per consentire di ottenere prestazioni ottimali. .NET MAUI utilizza gestori specifici per ogni piattaforma ed elemento dell'interfaccia utente per eseguire un'operazione. Ad esempio, se si imposta iOS come destinazione per l'app, un gestore .NET MAUI eseguirà il mapping di questo codice a un UIButton
di iOS. Se si usa Android, si avrà un controllo AppCompatButton di Android. A questi gestori si accede indirettamente tramite un'interfaccia specifica del controllo fornita da .NET MAUI, ad esempio IButton
per un pulsante.
Nota
Se si preferisce, è anche possibile creare l'interfaccia utente in modo dinamico usando codice C#. Questo approccio consente di modificare il layout in base all'ambiente. Ad esempio, potrebbe essere necessario non visualizzare determinati controlli se l'utente non ha un livello di autorizzazione appropriato.
Con .NET MAUI è facile accedere a controlli comuni come i pulsanti, Altri controlli comuni, ad esempio campi di immissione di testo, etichette e selettori data, sono di facile uso. Questi controlli, tuttavia, non bastano da soli a ottenere una buona piattaforma per la creazione di app avanzate. .NET MAUI fornisce anche:
- Un motore di layout elaborato per la progettazione di pagine.
- Più tipi di pagina per la creazione di tipi di spostamento complessi, come i drawer.
- Supporto per data-binding, per modelli di sviluppo più eleganti e gestibili.
- Possibilità di creare gestori personalizzati per migliorare il modo in cui vengono presentati gli elementi dell'interfaccia utente.
- Accesso diretto ad API native e astrazione di molte esigenze comuni di app desktop e per dispositivi mobili distinte dall'interfaccia utente. La libreria Essentials consente a un'app di accedere a elementi come GPS, accelerometro, batteria e stati di rete. Ci sono decine di sensori e servizi comuni allo sviluppo di app per dispositivi mobili disponibili anche attraverso questa libreria.