Características das Aplicações Web Modernas

Gorjeta

Este conteúdo é um excerto do eBook, Architect Modern Web Applications with ASP.NET Core e Azure, disponível no .NET Docs ou como um PDF transferível gratuito que pode ser lido offline.

Architect Modern Web Applications with ASP.NET Core and Azure eBook cover thumbnail.

"... Com design adequado, os recursos são baratos. Esta abordagem é árdua, mas continua a ter sucesso."
- Dennis Ritchie

As aplicações Web modernas têm maiores expectativas dos utilizadores e maiores exigências do que nunca. Espera-se que as aplicações Web atuais estejam disponíveis 24 horas por dia, 7 dias por semana, a partir de qualquer lugar do mundo, e utilizáveis a partir de praticamente qualquer dispositivo ou tamanho de ecrã. Os aplicativos Web devem ser seguros, flexíveis e escaláveis para atender a picos de demanda. Cada vez mais, cenários complexos devem ser tratados por experiências de usuário ricas construídas no cliente usando JavaScript e se comunicando de forma eficiente por meio de APIs da Web.

ASP.NET Core é otimizado para aplicações web modernas e cenários de hospedagem baseados em nuvem. Seu design modular permite que os aplicativos dependam apenas dos recursos que realmente usam, melhorando a segurança e o desempenho do aplicativo enquanto reduz os requisitos de recursos de hospedagem.

Aplicação de referência: eShopOnWeb

Esta orientação inclui uma aplicação de referência, eShopOnWeb, que demonstra alguns dos princípios e recomendações. O aplicativo é uma simples loja online, que suporta a navegação através de um catálogo de camisas, canecas de café e outros itens de marketing. O pedido de referência é deliberadamente simples para facilitar a sua compreensão.

eShopOnWeb

Figura 2-1. eShopOnWeb

Aplicação de referência

Hospedado na nuvem e escalável

ASP.NET Core é otimizado para a nuvem (nuvem pública, nuvem privada, qualquer nuvem) porque é de baixa memória e alta taxa de transferência. A menor pegada dos aplicativos ASP.NET Core significa que você pode hospedar mais deles no mesmo hardware e paga por menos recursos ao usar serviços de hospedagem em nuvem pré-pagos. A taxa de transferência mais alta significa que você pode atender mais clientes a partir de um aplicativo com o mesmo hardware, reduzindo ainda mais a necessidade de investir em servidores e infraestrutura de hospedagem.

Plataforma cruzada

ASP.NET Core é multiplataforma e pode ser executado em Linux, macOS e Windows. Esse recurso abre muitas novas opções para o desenvolvimento e a implantação de aplicativos criados com o ASP.NET Core. Os contêineres do Docker - Linux e Windows - podem hospedar aplicativos ASP.NET Core, permitindo que eles aproveitem os benefícios dos contêineres e microsserviços.

Modular e fracamente acoplado

Os pacotes NuGet são cidadãos de primeira classe no .NET Core, e os aplicativos ASP.NET Core são compostos por muitas bibliotecas por meio do NuGet. Essa granularidade de funcionalidade ajuda a garantir que os aplicativos dependam e implantem apenas a funcionalidade de que realmente precisam, reduzindo sua pegada ecológica e área de superfície de vulnerabilidade de segurança.

ASP.NET Core também suporta totalmente a injeção de dependência, tanto internamente quanto no nível do aplicativo. As interfaces podem ter várias implementações que podem ser trocadas conforme necessário. A injeção de dependência permite que os aplicativos se associem livremente a essas interfaces, em vez de implementações específicas, tornando-as mais fáceis de estender, manter e testar.

Facilmente testado com testes automatizados

ASP.NET aplicativos principais suportam testes de unidade, e seu acoplamento flexível e suporte para injeção de dependência facilita a troca de preocupações de infraestrutura com implementações falsas para fins de teste. ASP.NET Core também vem com um TestServer que pode ser usado para hospedar aplicativos na memória. Os testes funcionais podem então fazer solicitações para esse servidor na memória, exercendo toda a pilha de aplicativos (incluindo middleware, roteamento, vinculação de modelo, filtros, etc.) e recebendo uma resposta, tudo em uma fração do tempo que levaria para hospedar o aplicativo em um servidor real e fazer solicitações através da camada de rede. Esses testes são especialmente fáceis de escrever e valiosos para APIs, que são cada vez mais importantes em aplicativos Web modernos.

Comportamentos tradicionais e SPA suportados

Os aplicativos Web tradicionais envolveram pouco comportamento do lado do cliente, mas, em vez disso, confiaram no servidor para toda a navegação, consultas e atualizações que o aplicativo pode precisar fazer. Cada nova operação feita pelo usuário seria traduzida em uma nova solicitação da web, com o resultado sendo uma recarga de página inteira no navegador do usuário final. As estruturas MVC (Model-View-Controller) clássicas normalmente seguem essa abordagem, com cada nova solicitação correspondendo a uma ação diferente do controlador, que, por sua vez, funcionaria com um modelo e retornaria uma exibição. Algumas operações individuais em uma determinada página podem ser aprimoradas com a funcionalidade AJAX (JavaScript e XML assíncrono), mas a arquitetura geral do aplicativo usou muitas visualizações MVC e pontos de extremidade de URL diferentes. Além disso, o ASP.NET Core MVC também suporta Razor Pages, uma maneira mais simples de organizar páginas no estilo MVC.

Os SPAs (Single Page Applications, aplicativos de página única), por outro lado, envolvem muito poucas cargas de página do lado do servidor geradas dinamicamente (se houver). Muitos SPAs são inicializados dentro de um arquivo HTML estático que carrega as bibliotecas JavaScript necessárias para iniciar e executar o aplicativo. Esses aplicativos fazem uso intenso de APIs da Web para suas necessidades de dados e podem fornecer experiências de usuário muito mais ricas. BlazorWebAssembly fornece um meio de criar SPAs usando código .NET, que é executado no navegador do cliente.

Muitos aplicativos Web envolvem uma combinação de comportamento tradicional de aplicativo Web (normalmente para conteúdo) e SPAs (para interatividade). ASP.NET Core suporta MVC (Views ou Page based) e APIs da Web no mesmo aplicativo, usando o mesmo conjunto de ferramentas e bibliotecas de estrutura subjacentes.

Desenvolvimento e implementação simples

ASP.NET aplicativos principais podem ser escritos usando editores de texto simples e interfaces de linha de comando, ou ambientes de desenvolvimento completos, como o Visual Studio. Os aplicativos monolíticos geralmente são implantados em um único ponto de extremidade. As implantações podem ser facilmente automatizadas para ocorrer como parte de um pipeline de integração contínua (CI) e entrega contínua (CD). Além das ferramentas tradicionais de CI/CD, o Microsoft Azure tem suporte integrado para repositórios git e pode implantar atualizações automaticamente à medida que são feitas em uma ramificação ou tag git especificada. O Azure DevOps fornece um pipeline completo de compilação e implantação de CI/CD, e as Ações do GitHub fornecem outra opção para projetos hospedados lá.

Formulários ASP.NET e Web tradicionais

Além do ASP.NET Core, o ASP.NET 4.x tradicional continua a ser uma plataforma robusta e confiável para a criação de aplicativos web. ASP.NET suporta modelos de desenvolvimento MVC e API Web, bem como Web Forms, que é bem adequado para o desenvolvimento de aplicativos baseados em páginas avançadas e apresenta um rico ecossistema de componentes de terceiros. O Microsoft Azure tem um grande suporte de longa data para aplicativos ASP.NET 4.x e muitos desenvolvedores estão familiarizados com essa plataforma.

Blazor

Blazor está incluído no ASP.NET Core 3.0 e posterior. Ele fornece um novo mecanismo para criar aplicativos web client interativos ricos usando Razor, C# e ASP.NET Core. Ele oferece outra solução a considerar ao desenvolver aplicações web modernas. Há duas versões a considerar: do lado do servidor e do lado do Blazor cliente.

O lado Blazor do servidor foi lançado em 2019 com o ASP.NET Core 3.0. Como o próprio nome indica, ele é executado no servidor, renderizando as alterações no documento do cliente de volta para o navegador através da rede. O lado Blazor do servidor fornece uma experiência de cliente avançada sem exigir JavaScript do lado do cliente e sem exigir carregamentos de página separados para cada interação de página do cliente. As alterações na página carregada são solicitadas e processadas pelo servidor e, em seguida, enviadas de volta ao cliente usando o SignalR.

Client-side Blazor, lançado em 2020, elimina a necessidade de renderizar alterações no servidor. Em vez disso, ele aproveita WebAssembly para executar o código .NET dentro do cliente. O cliente ainda pode fazer chamadas de API para o servidor, se necessário, para solicitar dados, mas todo o comportamento do lado do cliente é executado no cliente via WebAssembly, que já é suportado por todos os principais navegadores e é apenas uma biblioteca JavaScript.

Referências – Aplicações Web Modernas