详解 ASP.NET Core MVC 的设计模式
MVC 是什么?它是如何工作的?我们来解剖它在本节课中我们要讨论的内容:
什么是 MVCMVC 由三个基本部分组成 - 模型(Model),视图(View)和控制器(Controller)。 它是用于实现应用程序的用户界面层的架构设计模式。 一个典型的实际应用程序通常具有以下层:
? MVC 如何工作让我们了解 MVC 设计模式是如何与案例一起工作的。 假设我们想要查询特定学生的详细信息(即 ID 为 1 的学生信息),并在 HTML 表格中的网页上显示这些详细信息,如下所示。 那么,从 Web 浏览器我们发出请求,URL 地址如下所示: http://52abp.com/student/details/1 上图的意思如下:
Model (模型)因此,在当前案例中 Model,是由 Student 类和管理学生数据的 StudentRepository 类组成,如下所示。 public class Student { public int Id { get; set; } public string Name { get; set; } public string ClassName { get; set; } } public interface IStudentRepository { Student GetStudent(int id); void Save(Student student); } public class StudentRepository : IStudentRepository { public Student GetStudent(int id) { //写逻辑实现 查询学生详情信息 throw new NotImplementedException(); } public void Save(Student student) { //写逻辑实现保存学生信息 throw new NotImplementedException(); } } 我们使用Student类来保存学生数据,而StudentRepository 类则负责查询并保存学生信息到数据库中。 如果要概括 model 的话,它就是 MVC 中用于包含一组数据的类和管理该数据的逻辑信息。 表示数据的类是 Student 类,管理数据的类是 StudentRepository 类。 如果您想知道我们为什么使用 但是其实我们是可以的,但是我们使用接口的原因,是因为接口,允许我们使用依赖注入,而依赖注入则可以帮助我们创建低耦合且易于测试的系统。 我们将在即将发布的视频中详细讨论依赖注入。 View -视图MVC 中的 View 应该只包含显示 Controller 提供给它的 Model 数据的逻辑。您可以将视图视为 HTML 模板。假设在我们的示例中,我们希望在 HTML 表中显示Student数据。 这种情况下的视图会和Student对象一起提供。 Student对象是将学生数据传递给视图的模型。 视图的唯一作用是将学生数据显示在 HTML 表中。 这是视图中的代码。 @model StudentManagement.Model.Student <!DOCTYPE html> <html> <head> <title>学生页面详情</title> </head> <body> <table> <tr> <td>Id</td> <td>@model.Id</td> </tr> <tr> <td>名字</td> <td>@model.Name</td> </tr> <tr> <td>班级</td> <td>@model.ClassName</td> </tr> </table> </body> </html> 在 MVC 中,View 仅负责呈现模型数据。 视图中不应该有复杂的逻辑。 视图中的逻辑必须非常少而且要小,并且它也必须仅用于呈现数据。 如果到达表示逻辑过于复杂的点,请考虑使用ViewModel 或View Component。 View Components是此版本 MVC 中的新增功能。 我们可以在以后的课程中讨论它。 Controller 控制器当来自浏览器的请求到达我们的应用程序时,作为 MVC 中的控制器,它处理传入的 http 请求并响应用户的操作。 在这种情况下,用户已向 URL 发出请求(/ student/ details/1),因此该请求被映射到StudentController中的Details方法,并向其传递Student的 ID,在本例中为 1. 此映射为 由我们的 web 应用程序中定义的路由规则完成。
public class StudentController:Controller { private IStudentRepository _studentRepository; public StudentController(IStudentRepository studentRepository) { _studentRepository = studentRepository; } public IActionResult Details(int id) { Student model = _studentRepository.GetStudent(id); return View(model); } } 如您所见,从Details方法中的代码,控制器将生成模型,在这种情况下,Model 是Student对象。 要从基础数据(如数据库)源检索Student数据,控制器使用StudentRepository类。 一旦控制器使用所需数据构造了Student模型对象,它就会将该Student模型对象传递给视图。 然后,视图生成所需的 HTML,以显示 Controller 提供给它的Student数据。 然后,此 HTML 通过网络发送给发出请求的用户。 如果这一点令人困惑,或者无法理解,请不要担心,我们将通过为我们的应用程序,会在后面一步步的创建模型,视图和控制器来实现这一目标,我们将在此过程中进行更加清晰和明确。 小结MVC 是用于实现应用程序的用户界面层的架构设计模式
正如您所看到的,在 MVC 设计模式中,我们可以清楚地分离各个关注点,让他们各司其职。 每个组件都有一个非常具体的任务要做。 在我们的下一个视频中,我们将讨论在我们的 asp.net core 应用程序中设置 MVC 中间件。 欢迎添加个人微信号:Like若所思。 欢迎关注我的公众号,不仅为你推荐最新的博文,还有更多惊喜和资源在等着你!一起学习共同进步! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- .net – Umbraco vs DotNetNuke:无法决定哪一个更合适
- asp.net – 使用ItemDataBound我只获得每隔一行.为什么?
- asp.net-mvc – 具有输出参数的ExecuteSqlCommand
- asp.net-mvc – 我可以从子部分视图访问父视图的模型吗?
- asp.net-mvc-3 – 不为CompareAttribute DataAnnotation触发
- asp.net-mvc-3 – 创建MVC3剃刀助手,如Helper.BeginForm()
- 错误处理 – 是否可以在ASP Classic中的try-catch像错误处理
- asp.net-mvc – 无法使用ASP.NET(MVC 4)加载文件或程序集Sy
- asp.net-mvc – 在ASP MVC 2中向控制器发送参数
- asp.net – Sitecore Droplink字段中的最大结果数量?
- asp.net – 跨线程使用HTTPContext
- 将ASP.Net网站从SVN部署到多个服务器?
- ASP.NET C#多项目解决方案.我应该把我的全局效用
- asp.net-mvc – 我有15分钟向我的同事介绍ASP.NE
- asp.net-mvc – 类型“表达式<>”在未引用的程序
- asp.net-mvc – 为什么在ASP.NET MVC 3中,默认路
- .net – 如何在MVC 5中设置本地授权认证?
- asp.net-mvc – Kendo UI异步上传无法在Internet
- asp.net-mvc – ASP.NET MVC中基础控制器类的好候
- asp.net表单身份验证将.net 2更改为.net4