Descrever a arquitetura .NET MAUI
Um padrão comum usado para o desenvolvimento de aplicativos entre plataformas é fatorar a lógica de negócios da interface do usuário e, em seguida, desenvolver interfaces de usuário e lógica de interface do usuário separadas para cada plataforma. Embora a lógica de negócios permaneça inalterada para cada tipo de dispositivo, o código que conduz o aplicativo e apresenta os dados pode variar. Essa variação é devido aos diferentes recursos, APIs e recursos que os dispositivos fornecem. Criar um aplicativo multiplataforma dessa maneira envolve lidar não apenas com SDKs (Software Development Kits) separados, mas com linguagens e conjuntos de ferramentas completamente diferentes.
O objetivo do .NET MAUI (Multi-platform Application User Interface) é simplificar o desenvolvimento de aplicativos multiplataforma. Usando a MAUI do .NET, você cria aplicativos multiplataforma usando um único projeto, mas pode adicionar código-fonte e recursos específicos da plataforma, se necessário. O principal objetivo do .NET MAUI é permitir que você implemente o máximo possível da lógica do aplicativo e do layout da interface do usuário em uma única base de código.
Nesta unidade, você aprenderá sobre a arquitetura .NET MAUI e as ferramentas necessárias para criar aplicativos .NET MAUI.
O que é a pilha de tecnologia .NET MAUI?
O .NET fornece uma série de estruturas específicas de plataforma para a criação de aplicativos: .NET para Android, .NET para iOS (e iPadOS), .NET para Mac e WinUI 3 (usando o SDK de Aplicativo do Windows). Todas essas estruturas têm acesso à mesma BCL (Base Class Library) do .NET. Essa biblioteca fornece a funcionalidade para criar e gerenciar recursos e para abstrair geralmente os detalhes do dispositivo subjacente longe do seu código. A BCL depende do tempo de execução do .NET para fornecer o ambiente de execução para seu código. Mono, uma implementação de código aberto do tempo de execução do .NET, implementa os ambientes Android, iOS (e iPadOS) e macOS. No Windows, o Win32 executa a mesma função, exceto que é otimizado para a plataforma Windows.
Embora a BCL permita que aplicativos executados em diferentes tipos de dispositivos compartilhem uma lógica de negócios comum, as várias plataformas têm maneiras diferentes de definir a interface do usuário de um aplicativo. As plataformas fornecem modelos variados para especificar como os elementos da interface do usuário se comunicam e interoperam. Você pode criar a interface do usuário para cada plataforma separadamente usando a estrutura específica da plataforma apropriada (.NET para Android, .NET para iOS, .NET para Mac ou WinUI 3). Mas essa abordagem exige que você mantenha uma base de código para cada família individual de dispositivos. O .NET MAUI fornece uma estrutura única para criar as interfaces do usuário para aplicativos móveis e de desktop. Você cria a interface do usuário usando essa estrutura (indicada pela seta 1 no diagrama a seguir) e o .NET MAUI se encarrega de convertê-la para a plataforma apropriada (seta 2).
Pode haver momentos em que você precise implementar um recurso específico da plataforma. Nessas situações, você pode invocar métodos na estrutura específica da plataforma, conforme destacado pela seta 3 no diagrama a seguir.
Como funciona o .NET MAUI?
O .NET MAUI abstrai a implementação de um elemento da interface do usuário de sua descrição lógica. Você pode descrever a interface do usuário usando XAML (Extensible Application Markup Language), uma linguagem neutra de plataforma baseada em XML. Por exemplo, o fragmento XAML a seguir mostra a descrição de um controle button:
<Button Text="Click me"
SemanticProperties.Hint="Counts the number of times you click"
Clicked="OnCounterClicked"
HorizontalOptions="Center" />
Este exemplo define o rótulo para o botão ("Click me") e especifica que um método chamado OnCounterClicked
deve ser executado quando o usuário seleciona o botão. Outras propriedades podem modificar o layout do botão e do texto; Neste exemplo, o texto está centralizado no botão. As propriedades semânticas fornecem suporte para acessibilidade para usuários com deficiência visual.
O .NET MAUI sempre gera código nativo para o dispositivo de destino, para que você obtenha o desempenho ideal. O .NET MAUI usa manipuladores específicos para cada plataforma e elemento da interface do usuário para executar uma operação. Por exemplo, se você segmentar iOS para o aplicativo, um manipulador .NET MAUI mapeia esse código para um iOS UIButton
. Se você rodar no Android, você recebe um AppCompatButton Android. Esses manipuladores são acessados indiretamente por meio de uma interface específica de controle fornecida pelo .NET MAUI, como IButton
para um botão.
Nota
Se preferir, você também pode criar a interface do usuário dinamicamente usando o código C#. Essa abordagem permite modificar o layout de acordo com o ambiente. Por exemplo, talvez você não queira que determinados controles apareçam se o usuário não tiver um nível de autorização apropriado.
O .NET MAUI facilita o acesso a controles comuns, como botões. Outros controles comuns, como campos de entrada de texto, rótulos e seletores de data, são igualmente fáceis. No entanto, os controles individuais não são suficientes para criar uma boa plataforma para criar aplicativos avançados. O .NET MAUI também fornece:
- Um mecanismo de layout elaborado para projetar páginas.
- Vários tipos de página para criar tipos de navegação avançados, como gavetas.
- Suporte para vinculação de dados, para padrões de desenvolvimento mais elegantes e fáceis de manter.
- A capacidade de criar manipuladores personalizados para aprimorar a maneira como os elementos da interface do usuário são apresentados.
- Acesso a APIs nativas diretamente e uma abstração de muitas necessidades comuns de aplicativos móveis ou de desktop que são separados da interface do usuário. A biblioteca de itens essenciais permite que um aplicativo acesse coisas como o GPS, o acelerômetro e os estados da bateria e da rede. Existem dezenas de sensores e serviços comuns ao desenvolvimento móvel também disponíveis através desta biblioteca.