概述
本单元的目标是理解什么是 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 模型类举列:
public class Student
{
public int ID { get; set; }
public string Name { get; set; }
public DateTime Birthday { get; set; }
public bool RegisterCourse(int courseID)
{
// school business logic ...
return true;
}
}
Student 的属性展示学生的状态,例如 ta 是谁,ID 是多少,有大等。Student 的方法展示学生可以做什么,例如注册课程。
你可能已经注意到了,在开发的不同阶段中,Model 这个词的含义略有不同:
在设计期:Model 通常意味着模型类。例如“请为客户和订单创建模型”,意思是我们要创建一个 Customer 类和一个 Order 类来映射现实世界中的客户和订单
在运行期:Model 通常代指模型类的实例。例如“此页面的模型是客户”,意思是该网页的 Model 是 Customer 类的实例
Model 的分类
基于 Model 的用途,我们可以将它分为三类:
Domain Model:领域模型类代表并映射参与业务逻辑的现实世界对象
- 例如,学校系统中的学生和教师对象,销售管理系统中的订单和产品对象
View Model:视图模型类是为特定视图设计的
- 例如,如果我们想在页面上显示客户及其所有订单,我们可以专门创建 CustomerOrdersViewModel 类,此类包括 Customer 类型的属性和 IList
类型的属性
- 例如,如果我们想在页面上显示客户及其所有订单,我们可以专门创建 CustomerOrdersViewModel 类,此类包括 Customer 类型的属性和 IList
Data Transfer Model:又叫数据传输对象 Data Transfer Objects(DTO)。有时我们必须将一些临时的数据字段组合起来从视图传到控制器,尤其是在提交表单或调用 AJAX 请求时。在这些情况下,DTO 是一个很好的解决方案