"… 通过合理的设计,这些功能成本较低。 这种方法非常艰巨,但继续成功。
- 丹尼斯·里奇
新式 Web 应用程序具有比以往更高的用户期望和更高的需求。 今天的 Web 应用预计将从世界上任何地方 24/7 可用,并且几乎可从任何设备或屏幕大小使用。 Web 应用程序必须具有安全性、灵活性和可缩放性,以便满足高峰需求。 越来越多的复杂方案应由使用 JavaScript 在客户端上构建的丰富用户体验进行处理,并通过 Web API 高效通信。
ASP.NET Core 针对新式 Web 应用程序和基于云的托管方案进行优化。 其模块化设计使应用程序只能依赖于实际使用的这些功能,从而提高应用程序安全性和性能,同时降低托管资源要求。
参考应用程序:eShopOnWeb
本指南包括一个参考应用程序 eShopOnWeb,演示了一些原则和建议。 该应用程序是一个简单的在线商店,支持浏览衬衫、咖啡杯及其他营销产品的目录。 参考应用程序是故意简单的,以便于理解。
图 2-1. eShopOnWeb
参考应用程序
- eShopOnWeb
https://github.com/dotnet/eShopOnWeb
云托管且可缩放
ASP.NET Core 针对云(公有云、私有云、任何云)进行优化,因为它的内存不足和高吞吐量。 ASP.NET 核心应用程序的占用空间较小意味着可以在同一硬件上托管更多资源,在使用即用即付云托管服务时,需要为更少的资源付费。 提高的吞吐量意味着在同样的硬件条件下,你可以使用应用程序服务更多的客户,从而进一步减少对服务器和托管基础设施的投资需求。
跨平台
ASP.NET Core 是跨平台的,可以在 Linux、macOS 和 Windows 上运行。 此功能为使用 ASP.NET Core 生成的应用开发和部署提供了许多新选项。 Docker 容器(Linux 和 Windows)都可以托管 ASP.NET 核心应用程序,从而利用 容器和微服务的优势。
模块化和松散耦合
NuGet 包是 .NET Core 中的一流公民,ASP.NET Core 应用通过 NuGet 由许多库组成。 这种功能的细化程度有助于确保应用程序仅依赖并部署其实际需要的功能,从而减少其占用的空间和安全漏洞的暴露面。
ASP.NET Core 还完全支持在内部和应用程序级别 进行依赖项注入。 接口可以具有多个可根据需要交换的实现。 依赖项注入允许应用松散地耦合到这些接口,而不是特定的实现,使它们更易于扩展、维护和测试。
通过自动测试轻松实现测试
ASP.NET 核心应用程序支持单元测试,并且对依赖项注入的松散耦合和支持可以轻松地将基础结构问题与虚假实现交换,以实现测试目的。 ASP.NET Core 还附带了可用于在内存中托管应用的 TestServer。 然后,功能测试可以向此内存中服务器发出请求,执行完整的应用程序堆栈(包括中间件、路由、模型绑定、筛选器等),并接收响应,只需在实际服务器上托管应用并通过网络层发出请求所花费的时间的一小部分。 对于在现代 Web 应用程序中越来越重要的 API,这些测试尤其容易编写,而且非常有价值。
支持传统和 SPA 行为
传统的 Web 应用程序很少涉及客户端行为,而是依赖于服务器进行应用可能需要的所有导航、查询和更新。 用户所做的每项新操作都会被转换为新的网络请求,最终会在终端用户的浏览器中重新加载整个页面。 经典模型 -View-Controller (MVC) 框架通常遵循此方法,每个新请求对应于不同的控制器作,后者反过来会处理模型并返回视图。 给定页面上的一些单独的操作可能会使用 AJAX(异步 JavaScript 和 XML)功能来增强,但整个应用程序的体系结构采用了多个不同的 MVC 视图和 URL 终结点。 此外,ASP.NET Core MVC 还支持 Razor Pages,这是组织 MVC 样式页面的更简单方法。
相比之下,单页应用程序(SPA)涉及很少动态生成的服务器端页面加载(如果有)。 许多 SPA 在静态 HTML 文件中初始化,该文件加载启动和运行应用所需的 JavaScript 库。 这些应用大量使用 Web API 以满足其数据需求,并提供更丰富的用户体验。 Blazor WebAssembly 提供了使用 .NET 代码生成 SPA 的方法,然后该代码在客户端的浏览器中运行。
许多 Web 应用程序涉及传统 Web 应用程序行为(通常用于内容)和 SPA(用于交互)的组合。 ASP.NET Core 使用同一组工具和基础框架库支持同一应用程序中的 MVC(基于视图或页面)和 Web API。
简单开发和部署
ASP.NET 核心应用程序可以使用简单的文本编辑器和命令行接口或功能齐全的开发环境(如 Visual Studio)编写。 整体式应用程序通常部署到单个终结点。 作为持续集成(CI)和持续交付(CD)管道的一部分,可以轻松自动进行部署。 除了传统的 CI/CD 工具,Microsoft Azure 还集成了对 git 存储库的支持,并且可以在对指定的 git 分支或标记进行更新时自动部署更新。 Azure DevOps 提供功能齐全的 CI/CD 生成和部署管道,GitHub Actions 为托管在那里的项目提供了另一个选项。
传统的 ASP.NET 和 Web 窗体
除了 ASP.NET Core 之外,传统的 ASP.NET 4.x 仍然是构建 Web 应用程序的可靠可靠平台。 ASP.NET 支持 MVC 和 Web API 开发模型以及 Web 窗体,该模型非常适合基于页面的丰富应用程序开发和功能丰富的第三方组件生态系统。 Microsoft Azure 长期支持 ASP.NET 4.x 应用程序,许多开发人员都熟悉此平台。
Blazor
Blazor 包含在 ASP.NET Core 3.0 及更高版本中。 它提供了一种使用 Razor、C# 和 ASP.NET Core 生成丰富的交互式 Web 客户端应用程序的新机制。 它提供了另一个解决方案,在开发新式 Web 应用程序时要考虑。 需要考虑两个 Blazor 版本:服务器端和客户端。
服务器端 Blazor 随 ASP.NET Core 3.0 于 2019 年发布。 顾名思义,它在服务器上运行,通过网络将对客户端文档的更改呈现回浏览器。 Blazor服务器端提供丰富的客户端体验,无需客户端 JavaScript,并且无需为每个客户端页面交互单独加载页面。 从服务器请求和处理加载页中的更改,然后使用 SignalR 发送回客户端。
2020 年发布客户端 Blazor 后,不再需要在服务器上呈现更改。 相反,它利用 WebAssembly 在客户端中运行 .NET 代码。 如果需要请求数据,客户端仍可以对服务器进行 API 调用,但客户端的所有行为都通过 WebAssembly客户端运行,该行为已得到所有主要浏览器的支持,并且只是一个 JavaScript 库。
参考 - 新式 Web 应用程序
- ASP.NET Core 简介
https://learn.microsoft.com/aspnet/core/- 在 ASP.NET Core 中进行测试
https://learn.microsoft.com/aspnet/core/testing/- Blazor - 入门
https://blazor.net/docs/get-started.html