ASP.NET Core 6 基础入门系列(8) 项目结构详解之MVC

MVC模式 
  模型-视图-控制器(MVC)是在二十世纪八十年代为编程语言Smalltalk发明的一种软件设计模式。
  ASP.NET Core MVC 是使用“模型-视图-控制器”设计模式构建 Web 应用和 API 的丰富框架。
模型-视图-控制器 (MVC) 体系结构模式将应用程序分成 3 个主要组件组:模型、视图和控制器。 此模式有助于实现关注点分离。 使用此模式,用户请求被路由到控制器,后者负责使用模型来执行用户操作和/或检索查询结果。 控制器选择要显示给用户的视图,并为其提供所需的任何模型数据。

  这种责任划分有助于根据复杂性缩放应用程序,因为这更易于编码、调试和测试包含单一作业的某个组成部分(模型、视图或控制器)。 但这会加大更新、测试和调试代码的难度,该代码在这 3 个领域的两个或多个领域间存在依赖关系。 例如,用户界面逻辑的变更频率往往高于业务逻辑。 如果将表示代码和业务逻辑组合在单个对象中,则每次更改用户界面时都必须修改包含业务逻辑的对象。 这常常会引发错误,并且需要在每次进行细微的用户界面更改后重新测试业务逻辑。

提示:视图和控制器均依赖于模型。 但是,模型既不依赖于视图,也不依赖于控制器。 这是分离的一个关键优势。 这种分离允许模型独立于可视化展示进行构建和测试。

模型责任

  MVC 应用程序的模型 (M) 表示应用程序和任何应由其执行的业务逻辑或操作的状态。 业务逻辑应与保持应用程序状态的任何实现逻辑一起封装在模型中。 强类型视图通常使用 ViewModel 类型,旨在包含要在该视图上显示的数据。 控制器从模型创建并填充 ViewModel 实例。

视图责任

  视图 (V) 负责通过用户界面展示内容。 它们使用 视图引擎在Razor HTML 标记中嵌入 .NET 代码。 视图中应该有最小逻辑,并且其中的任何逻辑都必须与展示内容相关。 如果发现需要在视图文件中执行大量逻辑以显示复杂模型中的数据,请考虑使用 View Component、ViewModel 或视图模板来简化视图。

控制器职责

  控制器 (C) 是处理用户交互、使用模型并最终选择要呈现的视图的组件。 在 MVC 应用程序中,视图仅显示信息;控制器处理并响应用户输入和交互。 在 MVC 模式中,控制器是初始入口点,负责选择要使用的模型类型和要呈现的视图(因此得名 - 它控制应用如何响应给定请求)。

提示:控制器不应由于责任过多而变得过于复杂。 要阻止控制器逻辑变得过于复杂,请将业务逻辑推出控制器并推入域模型。

           如果发现控制器操作经常执行相同类型的操作,可将这些常见操作移入筛选器

ASP.NET Core MVC 框架是轻量级、开源、高度可测试的演示框架,并针对 ASP.NET Core 进行了优化。它提供一种基于模式的方式,用于生成可彻底分开管理事务的动态网站。 同时提供对标记的完全控制,支持 TDD 友好开发并使用最新的 Web 标准。

DotNet6_Web_Study 项目中的默认MVC结构如下图所示

编译并运行项目后,浏览器呈现如下内容

从浏览器的地址栏中可以看出并未指定具体的控制器,但是却能正常访问到系统页面,这里面涉及到MVC中非常重要的一个技术知识点路由机制。

路由

  ASP.NET Core MVC 建立在 ASP.NET Core 的路由 之上,是一个功能强大的 URL 映射组件,可用于生成具有易于理解和可搜索 URL 的应用程序。 它可让你定义适用于搜索引擎优化 (SEO) 和链接生成的应用程序 URL 命名模式,而不考虑如何组织 Web 服务器上的文件。 可以使用支持路由值约束、默认值和可选值的方便路由模板语法来定义路由。

  通过基于约定的路由,可以全局定义应用程序接受的 URL 格式以及每个格式映射到给定控制器上特定操作方法的方式。 接收传入请求时,路由引擎分析 URL 并将其匹配到定义的 URL 格式之一,然后调用关联的控制器操作方法。

上面浏览器地址栏中未指定具体的控制器却能正常访问系统页面,是因为在项目启动过程中启用并注册了默认的路由信息

当访问 https://localhost:7086 时,由于未指定控制器,系统自动匹配到了名称为 default 的路由信息,控制器为Home,Action为Index。

换用火狐浏览器,如果我们输入 https://localhost:7086/Home ,也可以正常访问

换用IE11浏览器,如果我们输入 https://localhost:7086/Home/Index,也可以正常访问

关于ASP.NET Core MVC 的更多知识,在后续的博客中会详细介绍。


参考文献:

  • 《ASP.NET Core MVC 概述》https://docs.microsoft.com/zh-cn/aspnet/core/mvc/overview?view=aspnetcore-6.0
posted @   张传宁  阅读(36)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
页脚 HTML 代码
点击右上角即可分享
微信分享提示