Características de aplicativos Web modernos

Dica

Esse conteúdo é um trecho do livro eletrônico, para Projetar os Aplicativos Web Modernos com o ASP.NET Core e o Azure, disponível no .NET Docs ou como um PDF para download gratuito que pode ser lido offline.

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

"… com o design correto, os recursos são obtidos sem esforços. Essa abordagem é árdua, mas continua a ter êxito."
- Dennis Ritchie

Os aplicativos Web modernos têm maiores expectativas de usuário e maiores demandas do que nunca. Os aplicativos Web de hoje devem estar disponíveis 24/7 em qualquer lugar do mundo e ser utilizáveis praticamente em qualquer dispositivo ou tamanho de tela. Os aplicativos Web precisam ser seguros, flexíveis e escalonáveis para atender aos picos da demanda. Cada vez mais, os cenários complexos devem ser tratados por experiências avançadas do usuário criadas no cliente por meio de JavaScript e pela comunicação eficiente por meio de APIs Web.

O ASP.NET Core é otimizado para aplicativos Web modernos e cenários de hospedagem baseada em nuvem. Seu design modular permite que os aplicativos dependam somente dos recursos que realmente usarem, melhorando o desempenho e a segurança do aplicativo e, ao mesmo tempo, reduzindo os requisitos de recursos de hospedagem.

Referência de aplicativo: eShopOnWeb

Estas diretrizes incluem um aplicativo de referência, o eShopOnWeb, que demonstra alguns dos princípios e das recomendações. O aplicativo é uma loja online simples compatível com navegação em um catálogo de camisetas, canecas de café e outros itens de marketing. O aplicativo de referência é deliberadamente simples para facilitar o entendimento.

eShopOnWeb

Figura 2-1. eShopOnWeb

Aplicativo de referência

Hospedado na nuvem e escalonável

O ASP.NET Core é otimizado para a nuvem (nuvem pública, nuvem privada, qualquer nuvem) porque tem baixa memória e alta taxa de transferência. Uma superfície menor dos aplicativos do ASP.NET Core significa que você pode hospedar mais partes dele no mesmo hardware e pagar por menos recursos quando usar os serviços pré-pagos de hospedagem na nuvem. A taxa de transferência mais alta significa que você pode atender mais clientes por meio de um aplicativo considerando o mesmo hardware, reduzindo ainda mais a necessidade de investir em servidores e na infraestrutura de hospedagem.

Plataforma cruzada

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

Flexível e acoplado de forma flexível

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 da funcionalidade ajuda a garantir que os aplicativos dependam e implantem somente a funcionalidade de que realmente precisam, reduzindo sua área da superfície de vulnerabilidade de segurança.

O ASP.NET Core também é totalmente compatível com 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 alternadas, conforme necessário. A injeção de dependência permite que os aplicativos sejam acoplados de modo flexível a essas interfaces, em vez de a implementações específicas, facilitando a extensão, a manutenção e o teste.

Testados facilmente com testes automatizados

Os aplicativos ASP.NET Core são compatíveis com teste de unidade, além disso, o acoplamento flexível e o suporte a injeções de dependência facilitam a alternância de interesses da infraestrutura com implementações fictícias para fins de teste. O ASP.NET Core também é fornecido com um TestServer que pode ser usado para hospedar aplicativos em memória. Os testes funcionais podem então fazer solicitações para esse servidor em memória, exercitando a pilha completa do aplicativo (incluindo middleware, roteamento, model binding, filtros, etc.) e recebendo uma resposta, tudo isso em uma fração do tempo que levaria para hospedar o aplicativo em um servidor real e fazer solicitações por meio da camada de rede. Esses testes são especialmente fáceis de serem gravados e significativos para APIs, que são cada vez mais importantes em aplicativos Web modernos.

Comportamentos tradicionais e de SPA com suporte

Os aplicativos Web tradicionais envolvem pouco comportamento do lado do cliente e, em vez disso, dependem do servidor para todas as consultas, atualizações e navegação que o aplicativo pode precisar fazer. Cada nova operação feita pelo usuário é convertida em uma nova solicitação da Web, com o resultado sendo um recarregamento de página inteira no navegador do usuário final. As estruturas MVC (Modelo-Exibição-Controlador) clássicas normalmente seguem essa abordagem, com cada nova solicitação correspondente a uma ação de controlador diferente, que, por sua vez, trabalham com um modelo e retornam uma exibição. Algumas operações individuais em determinada página podem ser aprimoradas com a funcionalidade AJAX (Asynchronous JavaScript And XML), mas a arquitetura geral do aplicativo usava muitas diferentes exibições do MVC e pontos de extremidade de URL. Além disso, o ASP.NET Core MVC também é compatível com Razor Pages, uma maneira mais simples para organizar as páginas de estilo MVC.

Por outro lado, os SPAs (aplicativos de página única) envolvem muito poucos carregamentos de página do lado do servidor gerados dinamicamente (se houver). Muitos SPAs são inicializados em 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 Web para suas necessidades de dados e podem fornecer experiências do usuário muito mais avançadas. BlazorWebAssembly fornece um meio de compilação de SPAs usando o código .NET, que é executado no navegador do cliente.

Muitos aplicativos Web envolvem uma combinação do comportamento do aplicativo Web tradicional (normalmente para o conteúdo) e SPAs (para a interatividade). O ASP.NET Core é compatível com o MVC (baseado em Exibições ou em Páginas) e com as APIs Web no mesmo aplicativo, usando o mesmo conjunto de ferramentas e de bibliotecas da estrutura subjacentes.

Desenvolvimento e implantação simples

Os aplicativos ASP.NET Core podem ser escritos com editores de texto e interfaces de linha de comando simples ou com ambientes de desenvolvimento completo como o Visual Studio. Normalmente, os aplicativos monolíticos são implantados em um único ponto de extremidade. As implantações podem ser automatizadas com facilidade para ocorrerem como parte de um pipeline de CI (integração contínua) e CD (entrega contínua). Além das ferramentas de CI/CD tradicionais, o Microsoft Azure tem suporte integrado para repositórios do Git e pode implantar automaticamente atualizações conforme elas são feitas em um branch do GIT ou marcação especificado. O Azure DevOps fornece um pipeline de compilação e implantação de CI/CD com recursos completos e o GitHub Actions fornece outra opção para projetos hospedados lá.

ASP.NET tradicional e Web Forms

Além do ASP.NET Core, o ASP.NET 4.x tradicional continua sendo uma plataforma robusta e confiável para a criação de aplicativos Web. O ASP.NET dá suporte aos modelos de desenvolvimento do MVC e da API Web, bem como ao Web Forms, que é adequado para o desenvolvimento de aplicativos avançados baseados em página e apresenta um ecossistema avançado de componentes de terceiros. O Microsoft Azure apresenta um excelente suporte de longa data para aplicativos ASP.NET 4.x e muitos desenvolvedores estão familiarizados com essa plataforma.

Blazor

Blazoré incluído com ASP.NET Core 3.0 e posterior. Ele fornece um novo mecanismo para a compilação de aplicativos de cliente Web interativos avançados usando o Razor, C# e o ASP.NET Core. Ele oferece outra solução a ser considerada ao desenvolver aplicativos Web modernos. Há duas versões de Blazor a serem consideradas: do lado do servidor e do lado do cliente.

O lado do servidor Blazor foi lançado em 2019 com o ASP.NET Core 3.0. Como o nome indica, ele é executado no servidor, renderizando alterações no documento cliente de volta para o navegador pela rede. O lado do servidor Blazor fornece uma experiência de cliente avançada sem a necessidade de JavaScript do lado do cliente e sem a necessidade de 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.

O lado do cliente 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 por meio do WebAssembly, qual já tem suporte de todos os navegadores principais e é apenas uma biblioteca JavaScript.

Referências – Aplicativos Web modernos