Asp.net mvc MVC中的模型

Asp.net mvc MVC中的模型,asp.net-mvc,model-view-controller,data-modeling,Asp.net Mvc,Model View Controller,Data Modeling,我刚刚开始学习ASP.NETMVC,首先尝试理解它的原理。我想我很清楚控制器和视图所扮演的角色,但是我对模型部分有点困惑。有些来源说它是域模型,有些说它是数据模型,有些说它是绑定到视图的对象 我觉得这是完全不同的事情。因此,有人能一劳永逸地解决这个问题吗?该模型是“应用程序运行所依据的信息的特定于域的表示”。它不仅仅是数据模型,因为它比MVC模式所考虑的级别低,而且(例如)是封装数据并让您对其执行处理的类 MS的Scott Guthrie在以下方面使用了此定义: 基于MVC的应用程序中的“模型”

我刚刚开始学习ASP.NETMVC,首先尝试理解它的原理。我想我很清楚控制器和视图所扮演的角色,但是我对模型部分有点困惑。有些来源说它是域模型,有些说它是数据模型,有些说它是绑定到视图的对象

我觉得这是完全不同的事情。因此,有人能一劳永逸地解决这个问题吗?

该模型是“应用程序运行所依据的信息的特定于域的表示”。它不仅仅是数据模型,因为它比MVC模式所考虑的级别低,而且(例如)是封装数据并让您对其执行处理的类

MS的Scott Guthrie在以下方面使用了此定义:

基于MVC的应用程序中的“模型” 是应用程序的组件 负责维护 国家。这种状态通常持续存在 在数据库中(例如:we 可能有一个产品类 用于表示来自的订单数据 产品表(SQL内部)

进一步阅读:

您应该一步一步地了解它

摘自其中一章:第26页

在模型-视图-控制器框架中,术语“模型”是指表示模型数据的对象 应用程序以及集成验证和业务规则的相应域逻辑 用它。该模型在许多方面是基于MVC的应用程序的“心脏”,我们将在后面看到 从根本上推动它的行为


希望它有用。

我想实际添加一个附加层,使事情更清楚。基本上,“模型”是特定于领域的东西,并且知道如何持久化自身(假设持久化是领域的一部分)

依我看,我提到的另一层叫做ViewModel。。。有时,传递给视图的“模型”实际上与域无关。。。它将包含验证信息、用户显示信息、用于在视图中显示的查找列表值等内容


我认为这就是你所面临的脱节:-)

例如,如果你正在建立一个网站,比如说,管理核电站的运行,那么模型就是核电站的模型,包括当前运行参数的属性(温度等)、启动/停止发电的方法等。嗯。。。在这种情况下,该模型实际上是一个真实工厂与孤立模式的投影,但你得到了这个想法。

当他们说这是领域模型时,你的建议来源是正确的。在许多情况下,它也将与您的数据模型非常紧密地对齐

域模型和数据模型的不同之处在于,数据模型的形式(而不是内容)相对静态,而域模型添加了域的特定约束和规则。例如,在我的数据模型(数据库)中,我将血压表示为小整数(收缩压和舒张压)。在我的域模型中,我有一个“血压读数”对象,它保存两个读数中的每一个的值,并对可接受值的范围施加额外的限制(例如,收缩压的范围比小整数的范围小得多)。它还增加了对这些值的定性判断(150/90的BP为“高”)


问题域的这些方面的添加使得域模型不仅仅是数据模型。在某些领域中(例如,使用完全面向对象的数据模型可以更好地呈现,而在关系模型上映射较差的领域),您会发现这两个领域的差异非常显著。然而,我创建的所有系统都具有非常高的重叠度。事实上,我经常通过存储过程、用户定义类型等将相当数量的域约束推送到数据模型本身。

如果模型只是为了维护状态而存在,那么谁/什么操作和操作状态。我希望你不要说控制器,否则我也会对它们感到困惑:|“控制器:处理和响应事件(通常是用户操作),并可能间接调用模型上的更改。”用户调用一个操作,这将更改模型,导致视图更新。