.NET -  Iniciando com o .NET Aspire


  Neste artigo vou apresentar os principais conceitos relacionados com o .NET Aspire.

O .NET Aspire é uma nova tecnologia desenvolvida pela Microsoft, projetada para simplificar o desenvolvimento de aplicativos cloud-native utilizando o ecossistema .NET.

Ele atua como uma camada de abstração que automatiza muitas tarefas complexas e repetitivas no desenvolvimento de aplicativos distribuídos e conectados à nuvem, especialmente no que diz respeito à provisionamento de recursos e à integração com serviços externos.

O .NET Aspire é uma pilha opinativa(opinionated) e pronta para a nuvem para criar aplicativos nativos da nuvem resilientes, observáveis ​​e configuráveis ​​com o .NET. Ele vem com uma coleção pré-construída de componentes nativos da nuvem que são aprimorados com recursos como verificações de integridade, telemetria, resiliência e descoberta de serviços.

Combinado com uma experiência de desenvolvedor local sofisticada, mas simples, o .NET Aspire facilita a descoberta, aquisição e configuração de dependências essenciais para aplicativos nativos da nuvem no primeiro dia e além para aplicativos .NET novos e existentes usando o .NET 8+.

O que significa ser uma pilha opinativa ?

O termo "opinionated" (ou "opinativo") refere-se a frameworks ou ferramentas que fornecem uma estrutura definida e guiam os desenvolvedores a seguir um conjunto específico de práticas, convenções ou arquiteturas. Isso significa que o framework faz algumas escolhas de design por você, impondo uma forma "correta" de fazer as coisas, enquanto em um framework não opinativo, o desenvolvedor tem mais liberdade para escolher suas próprias abordagens.

No .NET Aspire, os componentes opinativos seriam os elementos, ferramentas ou bibliotecas que seguem esse princípio de ter uma opinião forte sobre como a aplicação deve ser estruturada e desenvolvida.

Um framework ou componente opinativo segue o princípio de "convenções sobre configuração", ou seja, ele define padrões e boas práticas que os desenvolvedores devem seguir. Isso reduz a quantidade de decisões que o desenvolvedor precisa tomar. No caso do .NET, por exemplo, a configuração padrão de um projeto ASP.NET Core é opinativa, pois define a estrutura do projeto, os middlewares usados, o pipeline de requisição, entre outros.

Componentes opinativos promovem o uso de boas práticas de programação, seguindo padrões reconhecidos, como injeção de dependência, separação de responsabilidades, uso de arquitetura limpa, entre outros.

Eles tendem a ter uma estrutura de código ou arquitetura sugerida ou imposta, como a recomendação de usar controllers no ASP.NET Core, onde os métodos de ação seguem convenções RESTful, ou o uso de Dependency Injection (DI) por padrão.

Em alguns casos, a estrutura opinativa pode limitar a flexibilidade de customização. Se o projeto requer uma abordagem diferente ou mais personalizada, o desenvolvedor pode ter que "lutar" contra as convenções do framework.

Como exemplo de componentes opinativos na plataforma .NET podemos citar a ASP.NET Core MVC, Razor Pages Blazor, Dependency Injection, etc.

Componentes Opinativos

Aqui está a lista atual de componentes que podem ser adicionados a um aplicativo Aspire.

Componente NuGet Descrição
Azure Blob Storage Aspire.Azure.Storage.Blobs Uma biblioteca para acessar o Azure Blob Storage
Azure Cosmos DB Entity Framework Core Aspire.Microsoft.EntityFrameworkCore.Cosmos Uma biblioteca para acessar bancos de dados do Azure Cosmos DB com o Entity Framework Core
Azure Cosmos DB Aspire.Microsoft.Azure.Cosmos Uma biblioteca para acessar  o Azure Cosmos DB databases.
Azure Key Vault Aspire.Azure.Security.KeyVault Uma biblioteca para acessar  o Azure Key Vault.
Azure Service Bus Aspire.Azure.Messaging.ServiceBus Uma biblioteca para acessar  o Azure Service Bus.
Azure Storage Queues Aspire.Azure.Storage.Queues Uma biblioteca para acessar o Azure Storage Queues.
Azure Table Storage Aspire.Azure.Data.Tables Uma biblioteca para acessar o Azure Table service.
PostgreSQL EF Core Aspire.Npgsql.EntityFrameworkCore.PostgreSQL Uma biblioteca para acessar o PostgreSQL usndo EF Core
PostgreSQL Aspire.Npgsql Uma biblioteca para acessar banco de dados PostgreSQL
RabbitMQ Aspire.RabbitMQ.Client Uma biblioteca para acessar o RabbitMQ.
Redis Distributed Caching Aspire.StackExchange.Redis.DistributedCaching Uma biblioteca para acessar o Redis caches for distributed caching.
Redis Output Caching Aspire.StackExchange.Redis.OutputCaching Uma biblioteca para acessar o Redis caches for output caching.
Redis Aspire.StackExchange.Redis Uma biblioteca para acessar o Redis caches.
SQL Server EF Core Aspire.Microsoft.EntityFrameworkCore.SqlServer Uma biblioteca para acessar o  SQL Server databases com EF Core.
SQL Server Aspire.Microsoft.Data.SqlClient A library for accessing banco de dados SQL Server

Muitos serviços essenciais, como diversas conexões de banco de dados, Redis, Entity Framework, gerenciamento de chaves e muito mais, estão imediatamente disponíveis ao consultar esta lista de componentes básicos. 

Características do Aspire

Podemos destacar 3 caracteristicas importantes do .NET Aspire:

Orquestração: Simplifica a configuração e a interconexão de componentes do aplicativo, reduzindo a complexidade e o tempo de desenvolvimento.

Componentes: Os pacotes NuGet simplificam a integração com serviços como Redis e PostgreSQL, fornecendo configurações padronizadas e injeção automática para comunicação de serviço eficiente.

Ferramentas: As integrações do Visual Studio e .NET CLI com modelos de projeto padronizados e componentes pré-configurados como .AppHost e .ServiceDefaults simplificam o desenvolvimento e o dimensionamento.

A seguir, vejamos o que torna o .NET Aspire único e valioso:

Produtividade: Automatizando várias tarefas relacionadas à configuração e ao gerenciamento de aplicativos nativos da nuvem, o .NET Aspire permite que os desenvolvedores se concentrem em escrever lógica de negócios e entregar recursos.

Consistência: Componentes e configurações padronizados garantem que os aplicativos sejam criados usando as melhores práticas, reduzindo a probabilidade de erros e inconsistências.

Escalabilidade: Projetado para lidar com as complexidades de sistemas distribuídos, o .NET Aspire facilita a criação de aplicativos que podem ser dimensionados para atender à crescente demanda.

Observabilidade: Recursos abrangentes de registro, telemetria e verificação de integridade fornecem insights profundos sobre o comportamento do aplicativo, facilitando o monitoramento e a manutenção.

Principais Recursos

E quanto aos principais recursos do .NET Aspire destacamos os seguintes:

App Host Project: Um novo tipo de projeto que centraliza a configuração e a arquitetura da sua aplicação. Ele coordena a interação entre os serviços e a infraestrutura que a aplicação requer durante o desenvolvimento

Dashboard em tempo real: O .NET Aspire inclui um painel visual web-based que exibe dados importantes sobre o funcionamento da aplicação em tempo real, como logs estruturados, traces distribuídos e métricas, facilitando a observação e depuração usando o OpenTelemetry.

Resiliência e observabilidade automáticas: Ao integrar-se com bibliotecas cliente para banco de dados, mensageria, caching, e serviços em nuvem, o .NET Aspire oferece resiliência contra falhas transitórias e configura, de forma automática, health checks e captura de logs e métricas, essencial para garantir que sua aplicação seja robusta e escalável.

Provisionamento automatizado: Durante o desenvolvimento, o .NET Aspire permite expressar, diretamente em código C#, quais recursos precisam ser provisionados (por exemplo, bancos de dados e serviços em nuvem) e coordena esse provisionamento automaticamente, tanto localmente quanto na nuvem

Suporte a containers e Kubernetes: O Aspire facilita a integração com Azure Container Apps e Kubernetes, permitindo uma implantação suave utilizando ferramentas como o Azure Developer CLI ou soluções customizadas, como a ferramenta Aspir8 para Kubernetes.

Desta forma o Aspire facilita a integração de serviços externos e infraestrutura, eliminando a necessidade de configurar manualmente diversos pacotes e boilerplate. O dashboard nativo com suporte ao OpenTelemetry oferece insights profundos sobre a aplicação sem necessidade de ferramentas adicionais, e, recursos como retries e circuit breakers vêm pré-configurados, aumentando a confiabilidade da aplicação desde o desenvolvimento.

Usando o Aspire - requisitos

Para trabalhar com o .NET Aspire, você precisará do seguinte instalado localmente:

- .NET 8.0
- .NET Aspire Workload
- Docker Desktop
- Visual Studio 2022 versão 17.9 ou superior

Podemos  instalar os pacotes do .NET Aspire usando os seguintes comandos do .NET CLI :

- Instala o .NET Aspire
dotnet workload install aspire

- Lista todas as cargas de trabalho instaladas e verifica a versão do .NET Aspire.
dotnet workload list

- Atualiza o Aspire para a última versão
dotnet workload update aspire

.NET Aspire e .NET Aspire Starter

Ao iniciar com o .NET Aspire, você vai encontrar dois modelos principais :  .NET Aspire Application.NET Aspire Starter Application.

Aqui está uma comparação para ajudar você a entender seus usos e diferenças:

O objetivo da aplicação .NET Aspire é fornecer uma configuração completa com todos os componentes essenciais necessários para a criação de aplicativos nativos da nuvem.

Inclui ApiService, AppHost, ServiceDefaults e projetos da Web.

É Ideal para desenvolvedores que buscam criar um aplicativo abrangente e pronto para produção com recursos completos de orquestração e integração.

Já o .NET Aspire Starter oferece uma configuração simplificada para começar rapidamente com o .NET Aspire, focando no básico.  Normalmente inclui menos projetos e configurações, fornecendo uma abordagem mais leve e simplificada.

É mais adequado para desenvolvedores iniciantes com o .NET Aspire que querem experimentar e aprender os fundamentos antes de passar para um aplicativo em grande escala.

Ña próxima parte do artigo vamos criar nossa primeira aplicação usando o projeto .NET Aspire Starter App.

E estamos conversados...

"Disse-lhes, pois, Jesus: Quando levantardes o Filho do homem, então conhecereis que EU SOU, e que nada faço por mim mesmo; mas isto falo como meu Pai me ensinou."
João 8:28

Referências:


José Carlos Macoratti