使用ORM的优缺点

JHa*_*ey1 35 orm

我想讨论使用ORM(例如ADO.NET)的优缺点.

好处:

  • 加速开发 - 消除了对重复SQL代码的需求.
  • 缩短开发时间.
  • 降低开发成本.
  • 克服供应商特定的SQL差异 - ORM知道如何编写特定于供应商的SQL,因此您不必这样做.

缺点:

  • 在学习使用ORM进行编程时,开发人员的工作效率会下降.
  • 开发人员不了解代码实际在做什么 - 开发人员更容易使用SQL.
  • ORM有缓慢的趋势.
  • ORM无法与复杂查询的SQL查询竞争.

总之,我认为使用ORM的优势(主要是减少执行重复任务所需的时间)远远超过ORM的缺点,例如难以掌握.

人们可以指出我出错的地方并建议任何进一步的优点/缺点.

Das*_*jes 27

"ORM无法与复杂查询的SQL查询竞争."

  • LINQ-SQL和实体框架都允许复杂查询甚至将SQL查询结果转换为对象.

"开发人员对代码实际执行的内容缺乏了解 - 开发人员更容易使用SQL."

  • 如果你知道你在做什么,那不是真的.SQL分析器足以查看已翻译的SQL查询.

"ORM有缓慢的趋势."

  • 是的,但延迟加载和一些智能选项可以使它几乎同样快.

"他们学会用ORM编程时,开发人员的工作效率会下降."

  • Hibernate和实体框架可能需要时间来学习,但从长远来看,它们将节省开发时间.另一方面,LINQ-SQL几乎没有学习曲线.

我说,使用ORM但请牢记这一点.

  1. 设计您的查询并编写代码,这将导致与服务器的往返次数最少.这是花费时间的往返所花费的开销.

  2. 在深入挖掘之前,先了解其他人对所选ORM的体验.

  3. 始终将您的查询与SQL Server Profiler中执行的实际查询进行比较.

编辑: 您不会将ORM用于性能危急情况,就像使用.Net或Java编写操作系统一样.选择前请考虑您的要求.即使您不使用ORM,您也可以通过重复大量代码或使用数据字典来自行完成映射.为什么不使用ORM并知道如何使用它的选项使其几乎快速?权衡利弊,做出选择.

http://mikehadlow.blogspot.ca/2012/06/when-should-i-use-orm.html

  • 不,不.ORM的目的不仅仅是进行查询.您必须检查查询以查看它们是否转换为最有效的表单,或者根据需要调整您的ORM查询.此外,大多数ORM支持将SQL查询结果直接转换为实体.除非它是一个非常简单的项目,否则不要指望不知道SQL并使用CRUD甚至使用ORM. (4认同)
  • 关于“始终将您的查询与正在执行的实际查询进行比较”,这首先违背了使用 ORM 的全部目的。 (2认同)
  • 事实上,这就是 ORM 的全部目的:针对非常简单的项目,在任何地方都没有瓶颈。当您到达“您必须检查查询以查看它们是否已转换为最有效的形式,或者根据需要调整您的 ORM 查询”*时,它**违背了在中使用 ORM 的全部目的**首先,因为使用 ORM 的目的就是为了避免这种情况。 (2认同)
  • 您无法为已关闭的问题添加答案。是的,再次回到 ORM,ORM 仅用于破解一些不需要任何数据库性能的简单应用程序。您对“大”和“重数据库”的定义需要修改。**为我命名**一些使用 ORM 来解决其持续需求的大型数据库项目。是的,ORM 的全部目的根本就是不接触查询。所以你问*“为什么 ORM 支持通过 SQL 查询”*。确实,这就是我一直在说的……………… …………………………………… (2认同)
  • ...................................................... ……第一条评论是的,你开始看到曙光了。[答案](http://goo.gl/kvQGMz) 还不够明显吗?我想这不适合那些埋藏太深的 ORM 的人,所以请允许我解释一下为什么 ORM **必须**允许原始 SQL:**因为[抽象](http://goo.gl/phoKE1) 是[泄漏] (http://goo.gl/FivDle)**。他们意识到他们的想法只适用于简单的用例,现在他们有两个选择,**1**:把婴儿扔出去,或者 **2**:让人们能够**忽略 ORM** 并执行原始 SQL。你猜他们选择了哪一个? (2认同)

Jim*_*dra 6

根据需求,您可能想要选择使用或不使用 ORM。例如:多个持久化引擎支持(需要在 Oracle、DB2、MySQL、SQL Server 等上运行),您可能会从 ORM 获得的抽象中受益,但代价是潜在的应用程序性能损失。

如果您知道您将只支持特定的持久性引擎,并且您希望能够利用持久性引擎中可能不受 ORM 支持的特定功能,那么...足够清楚您应该选择哪个选择。

另一个因素可能是您提到的开发人员知识以及学习新东西的时间和实际项目时间(硬性截止日期等)。这既适用于已经了解特定 ORM 的员工,也适用于不了解 ORM 但擅长 ADO.NET/任何其他较低级别数据访问技术的员工。