我对软件开发很陌生,我很困惑,因为模型中的类应该代表什么,我将详细说明一个场景,最后我会问几个问题。我正在使用VS 2013和MVC。
我有3张桌子, tblStudent(* StudentID,StudentName,StudentLastName,StudentDateOfBirth) 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个表,结果是我所拥有的表的不同属性的组合,所以我的模型类应该表示单个对象(即学生,模块)还是应该表示查询的结果集我想执行(具有StudentID,StudentName,StudentLastName,ModuleName的类)所以我可以将存储过程的结果映射到单个模型类?
答案 0 :(得分:0)
个人意见 - 但是如上所述的模型中的一个类应该代表一个“事物”,无论是学生,模块还是两者之间的关系。
如果您要使用Entity Framework从代码中与数据库进行交互,则表示数据库的表示方式,即三个类的集合,每个表对应一个表。
答案 1 :(得分:0)
模型是考虑MVC应用程序时的业务层。它将基于数据库结构创建。始终为数据库表创建模型。 也就是说,您应该为 tblStudent,tblModule和tblStudentModules创建模型。
ViewModel是Asp.Net MVC应用程序中未说出口的层之一。它适用于Model和View,并充当View的数据容器。 ViewModel是查看特定数据。它将基于View创建。因此,您需要基于每个视图创建视图模型。这些视图模型可能包含也可能不包含原始模型的变量。
也就是说,您需要为正在编写的存储过程创建一个viewmodel,其中包含 StudentID,StudentName,StudentLastName和ModuleName。这就是我们需要显示的所有内容视图页面是视图模型的变量。
View将成为ViewModel类型的强类型视图。
Model和ViewModel应该相互独立。控制器
将基于一个或多个来创建和初始化ViewModel对象
模型对象。
答案 2 :(得分:0)
这是一个非常复杂的主题,无法快速回答,但缩减版本是:
不要将数据库模型与对象模型混淆,虽然有许多相似点,但它们并不是一回事。
对象是包含自然分组的项目和功能的实体
表格是数据的标准化表示
要使用您的示例,您的学生和模块是使用第3个表来维持关系的主要实体
在对象模型上,您将拥有Student类和Module类 Student类中将包含一组模块。所以学生将管理自己与模块的关系,每个模块可能包含一个学生集合,允许它维持其关系。
然而,学生是一个人的类型,所以你可以定义一个Person类,然后让学生继承这个类并扩展它的功能以包括学生的行为,现在在这种情况下,一个人可能没有任何意义,除非过滤通过孩子班,如学生或老师。 在数据库中这很难维护,因为你不能拥有一个不存在的人员表
这就是MVC和MVVM的概念所在,因为这鼓励您创建一个分层系统,以便您拥有管理数据库对象关系的底层和处理用户对象交互的顶层