[.NET大牛之路 033] 实战:理解 ASP.NET Core 平台

上一节课我们从原型设计到功能开发,再到生产环境部署,快速上线了一个简单版本的书大师网站。现在,我们要开始逐步对这个网站进行迭代更新。

但在我们进行下一步开发前,有必要先了解一下 ASP.NET Core 整个平台,并理解我们后面要使用到的 Web 框架,不然在后面开发过程中难免会有同学产生疑惑。

1 理解 ASP.NET Core

ASP.NET Core 是微软的 Web 开发平台,源自 2002 年面世的 ASP.NET(当时对应的是 WebForms 框架),经过不断更新迭代,发展到了今天的 ASP.NET Core 6,或者叫 ASP.NET 6。

注意,请不要纠结是 ASP.NET Core 平台还是 ASP.NET Core 框架,根据语境不同,它可以叫平台,也可以叫框架。

ASP.NET Core 平台可以理解为包含处理 HTTP 请求所需一切基础库的集合,如 HTTP 服务器、中间件、依赖注入、视图引擎等。在它之上,官方封装了几个可以快速创建 Web 应用程序的框架,即 MVC、Razor Pages 和 Blazor,和一些像 Identity、EF Core 等辅助型的框架。如下图所示:

[.NET大牛之路 033] 实战:理解 ASP.NET Core 平台
来自《Pro ASP.NET Core》

所以,用 ASP.NET Core 做 Web 应用程序开发,有三种框架可供选择:MVC、Razor Pages、Blazor。这三种 Web 框架都有各自的特点,下面简单介绍一下这三种框架。

注意:本文讲的 Web 框架不包括 ASP.NET Core Web API,它其实是 MVC 的 Controller 子集。严格来说它属于服务框架,而不属于应用程序框架,一般用于为前后端分离的应用提供服务。

2 理解 MVC

MVC 模式(Model – View – Controller)是软件工程中的一种软件架构模式,把软件系统分为以下三个基本部分:

  • 模型(Model):模型用于封装与应用程序的业务逻辑相关的数据以及对数据的处理方法。
  • 视图(View):视图用于实现数据的展示,一般没有程序上的逻辑。
  • 控制器(Controller):控制器起到不同层面间的组织作用,用于控制应用程序的流程,处理事件并作出响应。

在 ASP.NET Core 平台之上,微软根据 MVC 架构模式封装了 ASP.NET Core MVC 框架,它的各个部分的关系如下图所示:

[.NET大牛之路 033] 实战:理解 ASP.NET Core 平台
来自《Pro ASP.NET Core》

不同平台对 MVC 的定义可能各有不同,并没有一个明确的定义。但大体上,MVC 模式中的每个部分是分工明确、界定清晰的。操作数据的逻辑只存在于模型中,呈现数据的逻辑只存在于视图中,处理用户的请求和输入只存在于控制器中。不管应用程序有多大、处于哪段生命周期,这种清晰的关注点分离(SoC)的 MVC 模式让我们的应用程序更容易维护和扩展。

3 理解 Razor Pages

与 MVC 不同的是,Razor Pages 以页面为中心,把 MVC 中的 Model 和 Controller 部分都集中在了视图模型(一个继承自 PageModel 的类)一个文件中,这个视图模型类文件的命名一般和视图文件命相同,在它的基础上增加 .cs 扩展名(和以前的 ASP.NET WebForms 类似)。也可以把视图模型类直接定义在视图文件中,比如某个 .cshtml 文件:

@page
@model IndexModel
@using Microsoft.AspNetCore.Mvc.RazorPages

@functions {
    public class IndexModel : PageModel
    {
        public string Title { get; set; } = "Foo bar";

        public void OnGet()
        {
        }
    }
}

...
<h3>@Model.Title</h3>
...

它的显著特点是视图文件开头有 @page 声明,表示这是一个 Razor Pages 网页。你甚至可以更简单些,像我们之前编写书大师的 Index.cshtml 一样,把视图模型类也省略掉。

Razor Pages 框架更适合业务简单的小型网站开发,也可以和 MVC 结合使用。

4 理解 Blazor

Blazor 允许你使用 C# 来实现 Web 交互式 UI,可以不需要使用 JavaScript。尽管 JavaScript 的生态很强大,但这种弱类型语言在业务逻辑比较复杂的大型 Web 开发上还是存在较大的缺陷。当然,经过几年的发展 JavaScript 的弱类型问题可以通过工程手段来解决,甚至使用 TypeScript 来替代,但在实现可重用组件上还是有诸多的不理想。

Blazor 应用可以使用 C#、HTML 和 CSS 实现可重用的 Web UI 组件,客户端和服务器代码都用 C# 编写的,允许你共享代码和库。Blazor 是 ASP.NET Core 平台下的一个较新的框架,可以很好的集成到 MVC/Razor Pages 应用中。

Blazor 支持两种运行方式,一是在客户端使用 WebAssembly 运行,二是在服务器端运行直接渲染到浏览器。

Blazor 可以使用 WebAssembly 直接在浏览器中运行客户端 C# 代码,正因为它是运行在 WebAssembly 上的 .NET 程序,所以客户端也可以重用服务器端的代码和库。

即使不使用 WebAssembly,Blazor 也可以在服务器端运行客户端的业务逻辑。客户端 UI 事件使用实时消息框架 SignalR 发送回服务器,一旦执行完成,所需的 UI 更改将发送到客户端渲染到 DOM 中。

下面是一段来自于模板生成的 Blazor 代码:

@page "/counter"

<h1>Counter</h1>

<p>Current count: @currentCount</p>

<button class="btn btn-primary" @onclick="IncrementCount">Click me</button>

@code {
    private int currentCount = 0;

    private void IncrementCount()
    {
        currentCount++;
    }
}

这段代码演示了 Blazor 的响应式编程,支持双向绑定,语法上像是为后端而生的 Vue。

5 小结

目前来看,MVC、Razor Pages 和 Blazor 三种 Web 应用框架各有各的优势,没有绝对的好与坏。从长远来看,我个人觉得随着 WebAssembly 越来越普及,未来 Blazor 会在企业应用领域更占优势,市场需求可能会更多一些。但介于 Blazor 目前存在的一些技术瓶颈(如加载慢、不利于 SEO 等),将很难取代 MVC 和 Razor Pages 在外部网站开发领域的地位。

不过,对于我们 .NET 开发者来说,完全不必在意这几种框架未来的趋势,因为这三种框架(加上 Web API)在整个 .NET 技术栈中有百分之九十九是共通的,在它们之间切换几乎不需要额外的学习成本。

为了能涵盖更多的知识点,书大师项目会在不同的功能模块中使用不同的框架,大致按照 MVC、Razor Pages、Blazor 的顺序来。下一节内容我们将使用 ASP.NET Core MVC 框架来改造我们的项目。

本文来自http://cnblogs.com/willick,经授权后发布,本文观点不代表Chaoqiang's Blog立场,转载请联系原作者。

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注

近期个人博客正在迁移中,原博客请移步此处,抱歉!