Compartilhar via


Introdução ao .NET MAUI

Dica

Esse conteúdo é um trecho do livro eletrônico, Padrões de Aplicativo Empresarial Usando .NETMAUI, disponível em .NET Docs ou em PDF para download gratuito que pode ser lido off-line.

Enterprise Application Patterns Using .NET MAUI eBook cover thumbnail.

Independentemente da plataforma, os desenvolvedores de aplicativos corporativos enfrentam vários desafios:

  • Requisitos de aplicativo que podem mudar com o tempo.
  • Novas oportunidades de negócios e desafios.
  • Comentários contínuos durante o desenvolvimento que podem afetar significativamente o escopo e os requisitos do aplicativo.

Com isso em mente, é importante criar aplicativos que podem ser facilmente modificados ou estendidos ao longo do tempo. Projetar para tal adaptabilidade pode ser difícil, pois requer uma arquitetura que permita que partes individuais do aplicativo sejam desenvolvidas de forma independente e testadas isoladamente sem afetar o restante do aplicativo.

Muitos aplicativos empresariais são suficientemente complexos para exigir mais de um desenvolvedor. Pode ser um desafio significativo decidir como projetar um aplicativo para que vários desenvolvedores possam trabalhar de forma eficaz em diferentes partes do aplicativo de forma independente, garantindo que as peças se unam perfeitamente quando integradas ao aplicativo.

A abordagem tradicional para projetar e criar um aplicativo resulta no que é chamado de aplicativo monolítico, em que os componentes estão firmemente acoplados sem uma separação clara entre eles. Normalmente, essa abordagem monolítica leva a aplicativos difíceis e ineficientes de manter, pois pode ser difícil resolver bugs sem interromper outros componentes do aplicativo e pode ser difícil adicionar novos recursos ou substituir recursos existentes.

Uma solução eficaz para esses desafios é particionar um aplicativo em componentes discretos e fracamente acoplados que podem ser facilmente integrados em um aplicativo. Essa abordagem oferece vários benefícios:

  • Ela permite que funcionalidades individuais sejam desenvolvidas, testadas, estendidas e mantidas por diferentes indivíduos ou equipes.
  • Ela promove a reutilização e uma clara separação de preocupações entre os recursos horizontais do aplicativo, como autenticação e acesso a dados, e os recursos verticais, como a funcionalidade de negócios específica do aplicativo. Isso permite que as dependências e interações entre os componentes do aplicativo sejam gerenciadas com mais facilidade.
  • Ela ajuda a manter uma separação de funções, permitindo que diferentes indivíduos ou equipes se concentrem em uma tarefa ou uma funcionalidade específica de acordo com sua experiência. Em particular, ela fornece uma separação mais clara entre a interface do usuário e a lógica de negócios do aplicativo.

No entanto, há muitos problemas que devem ser resolvidos ao particionar um aplicativo em componentes discretos e fracamente acoplados. Estão incluídos:

  • Decisão de como fornecer uma separação clara de preocupações entre os controles da interface do usuário e sua lógica. Uma das decisões mais importantes ao criar um aplicativo corporativo .NET MAUI é colocar a lógica de negócios em arquivos code-behind ou criar uma separação clara de preocupações entre os controles da interface do usuário e sua lógica, a fim de tornar o aplicativo mais acessíveis e testáveis. Para obter mais informações, confira Model-View-ViewModel.
  • Determinar se um contêiner de injeção de dependência deve ser usado. Os contêineres de injeção de dependência reduzem o acoplamento de dependência entre objetos, fornecendo um recurso para construir instâncias de classes com suas dependências injetadas e gerenciar seu tempo de vida com base na configuração do contêiner. Para obter mais informações, consulte Injeção de dependência.
  • Escolher entre o evento fornecido pela plataforma e a comunicação baseada em mensagens acoplada livremente entre componentes inconvenientes para vincular por referências de objeto e tipo. Para obter mais informações, confira Introdução à comunicação entre componentes fracamente acoplados.
  • Decida como navegar entre as páginas, incluindo como invocar a navegação e onde a lógica de navegação deve residir. Para obter mais informações, veja Navegação.
  • Determinação de como validar a entrada do usuário quanto à exatidão. A decisão deve incluir como validar a entrada do usuário e como notificar o usuário sobre erros de validação. Para obter mais informações, confira Validação.
  • Decisão sobre como executar a autenticação e como proteger recursos com autorização. Para obter mais informações, confira Autenticação e autorização.
  • Determinação de como acessar dados remotos de serviços Web, incluindo como recuperar dados de forma confiável e como armazenar dados em cache. Para obter mais informações, confira Acesso a dados remotos.
  • Decisão de como testar o aplicativo. Para obter mais informações, confira Teste de unidade.

Este guia fornece orientação sobre esses problemas e concentra-se nos principais padrões e arquitetura para criar um aplicativo corporativo multiplataforma usando .NET MAUI. As diretrizes visam ajudar a produzir código adaptável, passível de manutenção e testável, abordando cenários comuns de desenvolvimento de aplicativos empresariais do .NET MAUI e separando as preocupações de apresentação, lógica de apresentação e entidades por meio do suporte para o padrão MVVM (Model-View-ViewModel).

Aplicativo de exemplo

Este guia inclui um aplicativo de exemplo, eShopOnContainers, que é um repositório online que inclui a seguinte funcionalidade:

  • Autenticação e autorização em um serviço de back-end.
  • Navegação por um catálogo de camisas, canecas de café e outros itens de marketing.
  • Filtragem do catálogo.
  • Ordenação de itens do catálogo.
  • Exibição do histórico de pedidos do usuário.
  • Configuração de configurações.

Arquitetura de aplicativo do Azure

Abaixo está uma visão geral de alto nível da arquitetura do aplicativo de exemplo.

eShopOnContainers high-level architecture

O aplicativo de exemplo é fornecido com três aplicativos cliente:

  • Um aplicativo MVC desenvolvido com ASP.NET Core.
  • Um SPA (aplicativo de página única) desenvolvido com Angular 2 e Typescript. Essa abordagem para aplicativos Web evita a execução de uma viagem de ida e volta para o servidor com cada operação.
  • Um aplicativo multiplataforma desenvolvido com MAUI .NET, compatível com iOS, Android, macOS via Mac Catalyst e Windows 10/11.

Para obter informações sobre os aplicativos Web, confira Arquitetura e desenvolvimento de aplicativos Web modernos com ASP.NET Core e Microsoft Azure.

O aplicativo de exemplo inclui os seguintes serviços de back-end:

  • Um microsserviço de identidade, que usa ASP.NET Core Identity e IdentityServer.
  • Um microsserviço de catálogo, que é um serviço CRUD (criação, leitura, atualização, exclusão) controlado por dados que consome um banco de dados SQL Server usando o EntityFramework Core.
  • Um microsserviço de ordenação, que é um serviço controlado por domínio que usa padrões de design controlados por domínio.
  • Um microsserviço de cesta, que é um serviço CRUD orientado a dados que usa Redis Cache.

Esses serviços de back-end são implementados como microsserviços usando ASP.NET Core MVC e são implantados como contêineres exclusivos em um único host Docker. Coletivamente, esses serviços de back-end são chamados de aplicativo de referência eShopOnContainers. Os aplicativos cliente se comunicam com os serviços de back-end por meio de uma interface da Web REST (Transferência de Estado Representacional). Para obter mais informações sobre microsserviços e Docker, confira Microsserviços em contêineres.

Para obter informações sobre a implementação dos serviços de back-end, confira Microsserviços do .NET: arquitetura para aplicativos .NET em contêineres.

Aplicativo multiplataforma

Este guia se concentra na criação de aplicativos empresariais multiplataforma usando o .NET MAUIe usa o aplicativo multiplataforma eShopOnContainers como exemplo. A imagem abaixo mostra as páginas do aplicativo multiplataforma eShopOnContainers que fornecem a funcionalidade descrita anteriormente.

The eShopOnContainers MAUI app

O aplicativo multiplataforma consome os serviços de back-end fornecidos pelo aplicativo de referência eShopOnContainers. No entanto, ele pode ser configurado para consumir dados de serviços fictícios para aqueles que desejam evitar a implantação dos serviços de back-end.

O aplicativo multiplataforma eShopOnContainers exerce a seguinte funcionalidade do .NET MAUI :

  • XAML
  • Controles
  • Associações
  • Conversores
  • Estilos
  • Animações
  • Comandos
  • Comportamentos
  • Gatilhos
  • Efeitos
  • Controles personalizados

Para obter mais informações sobre essa funcionalidade, confira a documentação do .NET MAUI no Centro de Desenvolvedores da Microsoft e Criação de aplicativos multiplataforma com o .NET MAUI.

Além disso, os testes de unidade são fornecidos para algumas das classes no aplicativo multiplataforma eShopOnContainers.

Solução de aplicativo multiplataforma

A solução de aplicativo multiplataforma eShopOnContainers organiza o código-fonte e outros recursos em vários projetos. Todos os componentes móveis principais estão contidos em um projeto singular chamado eShopContainers. Esse é um recurso introduzido com o .NET 6 que permite que um projeto direcione várias saídas, o que ajuda a eliminar a necessidade de vários projetos de plataforma que teríamos usado no Xamarin.Forms e em versões anteriores do .NET. Um projeto adicional é incluído para teste de unidade.

Embora esse projeto tenha todos os seus componentes armazenados em um projeto singular, vale a pena considerar separá-lo em vários projetos com base em suas necessidades. Por exemplo, se você tiver várias implementações de provedores de serviços com base em um serviço com suas próprias dependências, talvez faça sentido dividir essas implementações do provedor de serviços no seu projeto separado. Bons candidatos à separação de projetos incluem modelos compartilhados, implementações de serviço, componentes de cliente de API, banco de dados ou camadas de cache. Qualquer lugar onde você sinta que a empresa poderia reutilizar um componente em outro projeto é um candidato em potencial à separação. Esses projetos podem ser empacotados por meio do NuGet para facilitar a distribuição e o controle de versão.

Todos os projetos usam pastas para organizar o código-fonte e outros recursos em categorias. As classes do aplicativo multiplataforma eShopOnContainers podem ser reutilizadas em qualquer aplicativo .NET MAUI com pouca ou nenhuma modificação.

Projeto eShopOnContainers

O projeto eShopOnContainers contém as seguintes pastas:

Pasta Descrição
Animações Contém classes que permitem que animações sejam consumidas em XAML.
Comportamentos Contém comportamentos expostos para exibir classes.
Controles Contém controles personalizados usados pelo aplicativo.
Conversores Contém conversores de valor que aplicam lógica personalizada a uma associação.
Exceções Contém o ServiceAuthenticationException personalizado.
Extensões Fornece métodos de extensão para as classes VisualElement e IEnumerable<T>.
Auxiliares Contém classes auxiliares para o aplicativo.
Modelos Contém as classes de modelo para o aplicativo.
Propriedades Contém AssemblyInfo.cs, um arquivo de metadados de assembly do .NET.
Serviços Contém interfaces e classes que implementam serviços fornecidos ao aplicativo.
Gatilhos Contém o gatilho BeginAnimation, que é usado para invocar uma animação em XAML.
Validações Contém classes envolvidas na validação da entrada de dados.
ViewModels Contém a lógica do aplicativo exposta a páginas.
Exibições Contém as páginas do aplicativo.

Resumo

As plataformas e ferramentas de desenvolvimento de aplicativos multiplataforma da Microsoft fornecem uma solução abrangente para aplicativos de cliente móvel B2E, B2B e B2C, fornecendo a capacidade de compartilhar código em todas as plataformas de destino (iOS, macOS, Android e Windows) e ajudando a reduzir o custo total de propriedade. Os aplicativos podem compartilhar a interface do usuário e o código lógico do aplicativo, mantendo a aparência da plataforma nativa.

Os desenvolvedores de aplicativos empresariais enfrentam vários desafios que podem alterar a arquitetura do aplicativo durante o desenvolvimento. Portanto, é importante criar um aplicativo para que ele possa ser modificado ou estendido ao longo do tempo. A projeção para essa adaptabilidade pode ser difícil, mas normalmente envolve particionar um aplicativo em componentes discretos e livremente acoplados que podem ser facilmente integrados em um aplicativo.