模型类应该表示什么

本文关键字:表示 什么 模型 | 更新日期: 2023-09-27 18:21:07

我对软件开发相当陌生,我对模型中的类应该代表什么非常困惑,我将详细说明一个场景,最后我将问几个问题。我使用的是带有MVC的VS 2013。

我有3张桌子,tbl学生(*学生ID、学生姓名、学生姓氏、学生出生日期)tblModule(*ModuleID,ModuleName,ModuleDescription)tblStudentModules(*StudentID,*ModuleID)-为打破的多对多关系而创建的表

我想使用数据库中的存储过程执行这个查询:

SELECT A.StudentID
  ,A.StudentName]
  ,A.StudentLastName
  ,B.ModuleName
FROM tblStudent A, tblModule B, tblStudentModules C
Where A.StudentID = C.StudentID
      And B.ModuleID = C.ModuleID

现在,我的查询使用了3个表,结果是我所拥有的表的不同属性的组合,那么,我的模型类应该表示单个对象(即Student、module),还是应该表示我要执行的查询的结果集(一个具有StudentID、StudentName、StudentLastName、ModuleName的类),以便我可以将存储过程的结果映射到单个模型类?

模型类应该表示什么

在考虑MVC应用程序时,模型是业务层。它将基于数据库结构创建。始终为数据库的表创建模型。也就是说,您应该需要为tblStudent、tblModule和tblStudentModules创建模型

ViewModel是Asp.NetMVC应用程序中的一个隐含层。它适合模型和视图,并充当视图的数据容器。ViewModel是视图特定的数据。它将基于视图创建。因此,您需要基于每个视图创建视图模型。这些视图模型可能包含也可能不包含原始模型的变量。

也就是说,您需要为正在编写的存储过程创建一个视图模型,其中包含StudentID、StudentName、StudentLastName和ModuleName也就是说,我们需要在视图页面中显示的所有内容都是视图模型的变量

  • 视图将是ViewModel类型的强类型视图。

  • Model和ViewModel应该相互独立。控制器
    将基于一个或多个
    创建并初始化ViewModel对象模型对象。

个人观点-但如上所述的模型中的类应该代表一个"事物",无论是学生、模块还是两者之间的关系。

例如,如果您使用实体框架从代码中与数据库交互,那么这就是数据库的表示方式,它是三个类的集合,每个类对应您所描述的表。

这是一个非常复杂的主题,无法快速回答,但精简版是:

不要混淆数据库模型和对象模型,因为它们有很多相似之处,但它们不是一回事。

对象是包含自然分组项目和功能的实体

其中,表是数据的标准化表示

使用您的示例,您有学生和模块,它们是使用第三个表来维护关系的主要实体

在对象模型上,您将有一个Student类和一个Module类Student类内部有一个模块集合。因此,学生将管理自己与模块的关系,每个模块可能包含一个学生集合,使其能够维护自己的关系。

然而,学生是一种类型的人,所以你可以定义一个Person类,然后让学生从这个类继承,并扩展其功能以包括学生行为,现在在这种情况下,一个人可能没有任何意义,除非通过一个孩子类(如学生或老师)过滤。在数据库中,这很难维护,因为你不能有一个不存在的人员表

这就是MVC和MVVM的想法产生的地方,因为这鼓励您创建一个分层系统,这样您就有了管理数据库对象关系的底层和处理用户对象交互的顶层