解释 ASP.NET 中的 MVC 模式
MVC 代表模型-视图-控制器。它是一种用于软件应用程序的架构模式。Trygve Reenskaug 于 1979 年提出了该模式,用于开发交互式应用程序。在这种模式下,应用程序被划分为三个组件:模型、视图和控制器。
模型
模型维护应用程序的状态。状态可以是瞬态的,即存储在内存中,也可以是持久化的,即保存到数据库中。
模型不仅仅是持有状态。它对数据执行业务逻辑,对数据强制执行业务规则,并且可以使用领域模型来操作数据。模型充当守门人和数据存储。
视图
视图根据模型中的数据生成并显示用户界面。在收到请求后,模型从数据库或内存中获取数据,处理它,并将其传递给视图。然后,视图决定如何将该数据呈现给用户。
控制器
控制器协调应用程序流程,并在视图和控制器之间充当中间人。
控制器接收请求。根据请求的内容,控制器使用模型构建数据,然后将其转发给视图进行显示。
这是一个说明 Web 应用程序上下文中 MVC 模式的图表。箭头上的数字表示用户请求的处理顺序。
用户与 Web 应用程序交互,该应用程序向应用程序发送 HTTP 请求。此请求由控制器拦截和处理。
控制器使用来自请求的数据来调用领域模型。
领域模型从数据库(或外部资源)获取数据,强制执行业务规则并根据业务逻辑处理数据
处理后的数据返回给控制器。
控制器将数据传递给视图。视图使用 HTML 模板和数据生成用户界面。
然后,视图将生成的 HTML 发送到 Web 应用程序,然后由浏览器显示。
MVC 模式确保了“关注点分离”原则。例如,视图从不处理传入数据,模型不关心如何显示数据,控制器不执行任何业务逻辑。每个组件都有其明确定义的职责。这使得应用程序易于开发和维护,因为它随着复杂性的增加而增长。
最初,MVC 模式是为了简化在桌面运行的传统 GUI 应用程序的开发而开发的。后来它被用于 Web 应用程序。Ruby on Rails 框架推广了 MVC 模式,后来被其他框架采用。
在 ASP.NET 应用程序中,MVC 组件由 C# 类处理。例如,这是一个表示用户的模型类。
示例
// Models/User.cs namespace app.Models{ public class User{ public int ID { get; set; } public string Name { get; set; } public string Salary { get; set; } } }
渲染用户的视图可能如下所示
// Views/User.cshtml <div class="user"> <div class="name"> <a href="/users/@user.ID">@user.Name</a> </div> <div class=salary> @user.Salary </div> </div>
最后,这是一个通过获取用户模型为用户构建视图的控制器。
// Controllers/UserController namespace app.Controllers{ public class UserController : BaseController{ public IActionResult User(int id){ // Get the user from the database User user = _service.GetUser(id); // Render the user.cshtml view, by providing the user model return View(user); } } }