在 MVC 中,ORM 是不是代表模型?

Posted

技术标签:

【中文标题】在 MVC 中,ORM 是不是代表模型?【英文标题】:In MVC, does an ORM represent the model?在 MVC 中,ORM 是否代表模型? 【发布时间】:2010-10-24 15:05:46 【问题描述】:

在 MVC 中,ORM 与模型相同还是只是模型的一种设计方式?换句话说,“模型”并不关心你如何获取数据,只要你得到它。或者,“模型”是否意味着我的代码中不再有一堆 SQL 语句,就像表单后面的代码一样?还有什么?

谢谢。

【问题讨论】:

【参考方案1】:

不,ORM 是将基于代码的模型映射到数据库的东西,反之亦然。

对于基本的 CRUD 应用程序,代码中的模型实际上只是代表数据库的 DTOs,并且您正在加载、编辑和保存它们,这就是您使用它的方式。如果您确实有一个“正确的”Domain Model,那么它会稍微复杂一些,因为理想情况下您希望将域模型类的形状与数据库表的形状分离。

详细说明,您将在代码中创建模型以表示Domain Model(即问题域的各种元素),构建某种纯 DTO 的“纪念品”类,您可以将其转换为领域模型上课/上课。然后配置一个 ORM(对象关系映射器)以将这些备忘录 DTO 映射到数据库。 IE。生成 SQL 语句,这些语句将根据您提供给它的模型对象更新数据库。

我可以理解一些困惑,因为有一些工具(LINQ to SQL 就是其中之一)实际上可以在设计器中为您生成模型类。这不是纯粹的 ORM,例如 NHibernate,您可以在其中提供 ORM 普通旧对象和一些映射配置,它使用(通常与反射结合)自动为数据库生成 SQL 语句。您可以使用 EF Code First 将域模型直接映射到数据库而侥幸成功,但我认为最终当您尝试对其中一个或另一个进行更改时,它可能会变得混乱。

【讨论】:

【参考方案2】:

如果您想了解使用 ORM 的 MVC 在现实世界中的良好实现,请查看基于 MS ASP.NET MVC、Nhibernate 和存储库模式的 S#arp Architecture。

【讨论】:

【参考方案3】:

模型应尽可能与后端数据存储技术解耦。 我认为这是一篇很好的文章,讨论了数据访问层、DTO 等之间的关系。http://msdn.microsoft.com/en-us/magazine/dd263098.aspx

【讨论】:

以上是关于在 MVC 中,ORM 是不是代表模型?的主要内容,如果未能解决你的问题,请参考以下文章

Django——模型基础(单表)

了解 MVC 中的 ORM 模型

MVC + ORM,生成报告

将 ORM 模型和 MVC 的搜索逻辑放在哪里? [复制]

– 模型和ORM基础

orm查询优化 MTV和MVC模型 字段的chioces参数 Ajax