概述

本单元的目标是理解什么是 Model(模型),以及工作项目中存在哪几种 Model?如何设计它们?

本单元主要内容:

  • MVC 模式中的 Model 是什么?

  • Model 是什么样的

  • Model 的分类

什么是 Model

在 MVC 模式中,Model 是抽象的数据结构(通常是类)。Model 通过它的属性和方法映射现实世界对象的状态和行为。

课程先讲 Model,是因为它的设计与创建无需依赖任何 ASP.NET Core 技术。

在 ASP.NET Core 中,Model 是 Plain Old CLR Objects(POCO)类。即 Model 类不需要实现接口。

相对的,有些技术就要求 Model 类实现某些接口。例如 WPF 就要求它的 View Model 实现 INotifyPropertyChanged 接口,以便在发生更改时能通知视图。

以一个简单的 Student 模型类举列:

  1. public class Student
  2. {
  3. public int ID { get; set; }
  4. public string Name { get; set; }
  5. public DateTime Birthday { get; set; }
  6. public bool RegisterCourse(int courseID)
  7. {
  8. // school business logic ...
  9. return true;
  10. }
  11. }

Student 的属性展示学生的状态,例如 ta 是谁,ID 是多少,有大等。Student 的方法展示学生可以做什么,例如注册课程。

你可能已经注意到了,在开发的不同阶段中,Model 这个词的含义略有不同:

  • 在设计期:Model 通常意味着模型类。例如“请为客户和订单创建模型”,意思是我们要创建一个 Customer 类和一个 Order 类来映射现实世界中的客户和订单

  • 在运行期:Model 通常代指模型类的实例。例如“此页面的模型是客户”,意思是该网页的 Model 是 Customer 类的实例

Model 的分类

基于 Model 的用途,我们可以将它分为三类:

  1. Domain Model:领域模型类代表并映射参与业务逻辑的现实世界对象

    1. 例如,学校系统中的学生和教师对象,销售管理系统中的订单和产品对象
  2. View Model:视图模型类是为特定视图设计的

    1. 例如,如果我们想在页面上显示客户及其所有订单,我们可以专门创建 CustomerOrdersViewModel 类,此类包括 Customer 类型的属性和 IList 类型的属性
  3. Data Transfer Model:又叫数据传输对象 Data Transfer Objects(DTO)。有时我们必须将一些临时的数据字段组合起来从视图传到控制器,尤其是在提交表单或调用 AJAX 请求时。在这些情况下,DTO 是一个很好的解决方案