【问题标题】:MVC "model" terminologyMVC“模型”术语
【发布时间】:2013-06-23 19:40:05
【问题描述】:

在阅读文章和处理 MVC 项目时,我发现“模型”一词以多种方式使用,我希望能够清楚地理解以下术语的含义。有些可能是同义词。有些可能与实体框架和/或 DDD 有关。

  • 型号
  • 查看模型
  • 域模型
  • 实体模型

感谢您在定义使用这些短语时(最有可能)所指的任何内容。

【问题讨论】:

标签: asp.net-mvc


【解决方案1】:
  • Model 可以指代任何用作概念模型的东西(请耐心等待)。 *Data*Model 是数据库外观的概念模型。

  • 查看模型。没有整齐地映射到 DataModel 中的实体的实体。通常,当您想为下拉列表添加可选值列表等内容时,您将使用 ViewModel。或者,当您想将额外信息添加到要发送到视图的模型中时。或者,更容易混淆的是,ViewModel 是一个自定义项,它由不同的数据实体组成,不会以通常的 MyEntities.SaveChanges() 方式保存到您的数据库中,而是需要您检索需要保存的位.

  • 域模型。 DataModel 和 Controller 之间的额外层。域模型可以最容易地描述为在得来速下接受您的订单的收银员。你向她要一件物品,她决定细节是什么以及是否允许你拿到那件物品。

  • 实体模型。一组代表数据库表、视图和存储过程的类。当一篇 MVC 文章谈到模型时,通常是指实体模型。

【讨论】:

  • 谢谢胡安。这无疑消除了一些不确定性。模型是一个通用/抽象术语,用于讨论任何类型的数据建模类。实体模型是直接代表您的数据源对象的类。我想我仍在尝试确定视图模型和域模型之间的区别。据我了解,“域”一词是指业务逻辑的应用。 View 模型不包含任何业务逻辑吗?只是表示逻辑?域模型是视图模型和包含业务逻辑的实体模型之间的另一层吗?
  • 任何模型都可以包含你喜欢的任何东西,但是你应该在你的领域模型中保留业务规则,并且只使用你的视图模型来打包和传递数据到你的视图,这就是为什么它被称为视图模型,而不是 ViewBuilderModel。
【解决方案2】:

域和实体模型“通常”指的是与业务对象平行的数据对象;想想“用户”或“汽车”或“水果蛋糕”,即。你在数据库中有一个表的东西。这些特定于您的域/业务,其中实体是这些对象的单个实例。

“通常”查看模型是指上面的模型集合,这些模型构成了您希望在网页/表单/whatnot 中查看/使用的信息。因此,也许您想要一份用户列表以及他们开到商店购买水果蛋糕的汽车。相关数据的集合成为在特定“视图”中处理的单个“模型”。

然后,模型就变成了一种非常通用的表达方式,但更模糊地说,它意味着某种类型的数据对象,您需要处理或公开您想要处理的信息。

【讨论】:

    【解决方案3】:

    在 ASP.NET MVC 中,M 代表 ViewModel。您使用模型来填充视图,并且您的浏览器可以从视图中将模型发布(类似的数据)回控制器。

    在控制器中填充 ViewModel 的逻辑取决于您自己。例如,您可以使用 Entity Framework 及其自己的模型和 AutoMapper 之类的工具来使用数据库模型的属性填充 ViewModel,或者您甚至可以使用 EF 模型作为 ViewModel。

    就像here说的:

    “我正在构建一个 MVC 应用程序”[意味着]实际上你正在将 MVC 表示层放到你的应用程序中

    【讨论】:

      【解决方案4】:

      ViewModel:用于定义绑定到一些 UI 元素(如文本框、列表、标签等)的属性/字段。

      模型:用于编写前端处理逻辑,如保存数据、根据我们从底层获得的数据计算字段值等

      【讨论】:

      • 我希望有人写评论为什么这个答案被否决。
      • 对于两种模型,您声明它们用于包含逻辑。这是不正确的。
      • 模型可以包含业务逻辑。验证是业务逻辑
      • 模型永远不等于saving data等处理逻辑。
      • 这个答案足够准确
      猜你喜欢
      • 2016-02-27
      • 2012-06-17
      • 2012-04-03
      • 2013-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-07
      相关资源
      最近更新 更多