Características de aplicativos Web modernosCharacteristics of Modern Web Applications

"…"… com o design correto, os recursos são obtidos sem esforços.with proper design, the features come cheaply. Essa abordagem é árdua, mas continua a ter êxito."This approach is arduous, but continues to succeed."
- Dennis Ritchie- Dennis Ritchie

Os aplicativos Web modernos têm maiores expectativas de usuário e maiores demandas do que nunca.Modern web applications have higher user expectations and greater demands than ever before. 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.Today's web apps are expected to be available 24/7 from anywhere in the world, and usable from virtually any device or screen size. Os aplicativos Web precisam ser seguros, flexíveis e escalonáveis para atender aos picos da demanda.Web applications must be secure, flexible, and scalable to meet spikes in demand. 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.Increasingly, complex scenarios should be handled by rich user experiences built on the client using JavaScript, and communicating efficiently through web APIs.

O ASP.NET Core é otimizado para aplicativos Web modernos e cenários de hospedagem baseada em nuvem.ASP.NET Core is optimized for modern web applications and cloud-based hosting scenarios. 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.Its modular design enables applications to depend on only those features they actually use, improving application security and performance while reducing hosting resource requirements.

Referência de aplicativo: eShopOnWebReference application: eShopOnWeb

Estas diretrizes incluem um aplicativo de referência, o eShopOnWeb, que demonstra alguns dos princípios e das recomendações.This guidance includes a reference application, eShopOnWeb, that demonstrates some of the principles and recommendations. O aplicativo é uma loja online simples compatível com navegação em um catálogo de camisetas, canecas e outros itens de marketing.The application is a simple online store which supports browsing through a catalog of shirts, coffee mugs, and other marketing items. O aplicativo de referência é deliberadamente simples para facilitar o entendimento.The reference application is deliberately simple in order to make it easy to understand.

eShopOnWeb

Figura 2-1.Figure 2-1. eShopOnWebeShopOnWeb

Aplicativo de referênciaReference Application

Hospedado na nuvem e escalonávelCloud-hosted and scalable

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.ASP.NET Core is optimized for the cloud (public cloud, private cloud, any cloud) because it is low-memory and high-throughput. Uma superfície menor dos aplicativos 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.The smaller footprint of ASP.NET Core applications means you can host more of them on the same hardware, and you pay for fewer resources when using pay-as-you go cloud hosting services. 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.The higher-throughput means you can serve more customers from an application given the same hardware, further reducing the need to invest in servers and hosting infrastructure.

Plataforma cruzadaCross platform

O ASP.NET Core é multiplataforma e pode ser executado no Windows, no macOS e no Linux.ASP.NET Core is cross-platform and can run on Linux, macOS, and Windows. Isso proporciona muitas novas opções para o desenvolvimento e a implantação de aplicativos criados com o ASP.NET Core.This opens up many new options for both development and deployment of apps built with 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.Docker containers - both Linux and Windows - can host ASP.NET Core applications, allowing them to take advantage of the benefits of containers and microservices.

Flexível e acoplado de forma flexívelModular and loosely coupled

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.NuGet packages are first-class citizens in .NET Core, and ASP.NET Core apps are composed of many libraries through 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.This granularity of functionality helps ensure apps only depend on and deploy functionality they actually require, reducing their footprint and security vulnerability surface area.

O ASP.NET Core também é totalmente compatível com a injeção de dependência, tanto internamente quanto no nível do aplicativo.ASP.NET Core also fully supports dependency injection, both internally and at the application level. As interfaces podem ter várias implementações que podem ser alternadas, conforme necessário.Interfaces can have multiple implementations that can be swapped out as needed. 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.Dependency injection allows apps to loosely couple to those interfaces, rather than specific implementations, making them easier to extend, maintain, and test.

Testados facilmente com testes automatizadosEasily tested with automated tests

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.ASP.NET Core applications support unit testing, and their loose coupling and support for dependency injection makes it easy to swap infrastructure concerns with fake implementations for test purposes. O ASP.NET Core também fornece um TestServer que pode ser usado para hospedar aplicativos em memória.ASP.NET Core also ships a TestServer that can be used to host apps in memory. 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.Functional tests can then make requests to this in-memory server, exercising the full application stack (including middleware, routing, model binding, filters, etc.) and receiving a response, all in a fraction of the time it would take to host the app on a real server and make requests through the network layer. 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.These tests are especially easy to write, and valuable, for APIs, which are increasingly important in modern web applications.

Comportamentos tradicionais e de SPA com suporteTraditional and SPA behaviors supported

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.Traditional web applications have involved little client-side behavior, but instead have relied on the server for all navigation, queries, and updates the app might need to make. 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.Each new operation made by the user would be translated into a new web request, with the result being a full page reload in the end user's browser. 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.Classic Model-View-Controller (MVC) frameworks typically follow this approach, with each new request corresponding to a different controller action, which in turn would work with a model and return a view. 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.Some individual operations on a given page might be enhanced with AJAX (Asynchronous JavaScript and XML) functionality, but the overall architecture of the app used many different MVC views and URL endpoints. 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.In addition, ASP.NET Core MVC also supports Razor Pages, a simpler way to organize MVC-style pages.

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).Single Page Applications (SPAs), by contrast, involve very few dynamically generated server-side page loads (if any). Muitos SPAs são inicializados em um arquivo HTML estático que carrega as bibliotecas JavaScript necessárias para iniciar e executar o aplicativo.Many SPAs are initialized within a static HTML file that loads the necessary JavaScript libraries to start and run the app. 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.These apps make heavy usage of web APIs for their data needs and can provide much richer user experiences.

Muitos aplicativos Web envolvem uma combinação do comportamento do aplicativo Web tradicional (normalmente para o conteúdo) e SPAs (para a interatividade).Many web applications involve a combination of traditional web application behavior (typically for content) and SPAs (for interactivity). 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.ASP.NET Core supports both MVC (Views or Page based) and web APIs in the same application, using the same set of tools and underlying framework libraries.

Desenvolvimento e implantação simplesSimple development and deployment

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.ASP.NET Core applications can be written using simple text editors and command line interfaces, or full-featured development environments like Visual Studio. Normalmente, os aplicativos monolíticos são implantados em um único ponto de extremidade.Monolithic applications are typically deployed to a single endpoint. 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).Deployments can easily be automated to occur as part of a continuous integration (CI) and continuous delivery (CD) pipeline. Além das ferramentas de CI/CD tradicionais, o Microsoft Azure tem suporte integrado para repositórios Git e pode implantar automaticamente atualizações conforme elas são feitas em um GIT branch ou marcação especificado.In addition to traditional CI/CD tools, Windows Azure has integrated support for git repositories and can automatically deploy updates as they are made to a specified git branch or tag.

ASP.NET tradicional e Web FormsTraditional ASP.NET and 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.In addition to ASP.NET Core, traditional ASP.NET 4.x continues to be a robust and reliable platform for building web applications. O ASP.NET é compatível com 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.ASP.NET supports MVC and Web API development models, as well as Web Forms, which is well-suited to rich page-based application development and features a rich third-party component ecosystem. 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.Windows Azure has great longstanding support for ASP.NET 4.x applications, and many developers are familiar with this platform.

Referências – Aplicativos Web modernosReferences – Modern Web Applications