你为什么要使用ORM?

Sim*_*nro 107 database orm

如果您要激发为什么要将ORM用于管理/客户的"优点",原因是什么?

尝试并保持每个答案的一个原因,以便我们可以看到被投票的最佳理由

Chu*_*uck 75

使用ORM的最重要原因是,您可以拥有丰富的面向对象的业务模型,并且仍然能够存储它并快速针对关系数据库编写有效的查询.从我的观点来看,除了您可以编写的高级查询类型之外,与其他生成的DAL相比,我没有看到优秀ORM给您带来的任何真正优势.

我想到的一种查询是多态查询.简单的ORM查询可能会选择数据库中的所有形状.你得到了一系列形状.但根据其鉴别器,每个实例都是正方形,圆形或矩形.

另一种类型的查询是在单个数据库调用中急切地获取对象和一个或多个相关对象或集合的查询.例如,返回每个形状对象,并填充其顶点和侧面集合.

我很抱歉在这里不同意这么多人,但我认为代码生成本身并不足以成为一个ORM.您可以为代码生成器编写或找到许多优秀的DAL模板,这些代码生成器没有ORM所做的概念或性能开销.

或者,如果您认为您不需要知道如何编写好的SQL来使用ORM,那么我不同意.从编写单个查询的角度来看,依赖ORM更容易.但是,使用ORM时,如果开发人员不了解他们的查询如何与ORM及其转换为的SQL一起工作,那么创建性能较差的例程就太容易了.

拥有一个适用于多个数据库的数据层可能是一个好处.虽然这不是我不得不依赖的.

最后,我必须重申,根据我的经验,如果您没有使用ORM的更高级查询功能,还有其他选项可以解决剩余问题,减少学习和减少CPU周期.

哦,是的,一些开发人员确实发现与ORM一起工作很有趣,所以ORM也很好,从保持开发人员的快乐角度来看.=)

  • 说得好。虽然最初的海报确实专门寻找“优点”而不是“缺点”,但我看到了一些由于不了解如何使用 ORM 的影响而创建的可怕的 SQL。对我来说,最大的好处是简单的 CRUD 事务,这是您用于事务系统的大部分 DAL 代码。我认为您在纯 ORM 和其他生成的 DAL 方法之间存在分歧。我认为任何可以帮助您在对象和数据库之间进行转换的东西都可以被视为 ORM,它只是一种不同的操作模型。 (2认同)

Bil*_*win 60

加快发展.例如,消除重复代码,例如将查询结果字段映射到对象成员,反之亦然.

  • 重复的代码很糟糕,但你能不能构建一个抽象来消除它?例如,您可以拥有一个表/查询结果对象,该对象将为您返回行,然后您可以对其进行处理。ORM 似乎将行分解为单个类实例,而不是进入 DB 选择的抽象,即查询结果的表/行。我并不是说这意味着 ORM 不好,但我不确定这是否是使用它们的原因。 (3认同)

Bil*_*win 51

使数据访问更加抽象和便携.ORM实现类知道如何编写特定于供应商的SQL,因此您不必这样做.

  • 虽然我同意这是ORM的一个特性,但我建议用例相当有限.我从来没有真正使用过MySql和sqlite的东西大约十年.我认为这对大多数开发人员来说可能是非常罕见的要求. (58认同)
  • @troelskn:我同意,我使用过很多RDBMS产品,但每个项目从不超过一两个.因此,可移植性并不是抽象SQL的最实用价值.我认为许多ORM用户根本不想在SQL中避免编码. (36认同)
  • 典型无用的答案我想知道为什么它被标记为好的答案似乎是问问题的人只是试图向他的老板证明他应该使用ORM :)我的问题宁愿是你会遇到什么样的问题与Hibernate http://stackoverflow.com/questions/6477170/why-im-scared-to-use-hibernate (4认同)
  • 供应商总是推出新版本/功能......只需要一些很酷的人来编写方言并轻松升级它! (2认同)
  • @ user310291:OP没有提出问题或陷阱,他要求使用ORM的好处.当然有利有弊,但他要求专业人士.坦率地说,我很惊讶这个答案得到了接受并得到了尽可能多的赞成,因为我不认为它是ORM的主要好处. (2认同)

Bil*_*win 15

支持在数据访问层中对业务规则进行OO封装.您可以使用首选的应用程序语言编写(和调试)业务规则,而不是使用笨重的触发器和存储过程语言.

  • 您不想将业务规则保存在数据库中吗?这就是数据库的好处,对吧:多个客户端可以使用 DBMS 提供的相同接口。如果您的大量界面逻辑被锁定在特定客户端的 ORM 代码中,则它不在数据库中,并且其他客户端也不会使用它。提示前台后台中断(一个客户的模型与另一个客户的模型不一致)。 (2认同)

Bil*_*win 10

为基本CRUD操作生成样板代码.一些ORM框架可以直接检查数据库元数据,读取元数据映射文件或使用声明性类属性.


Mat*_*lon 7

您可以轻松迁移到不同的数据库软件,因为您正在开发抽象.

  • 在30多年的数据库工作中,我没有必要这样做. (35认同)
  • 这并不意味着它是不可能的!:) (4认同)
  • @HLGEM这意味着你正在关闭客户的选择.它实际上可能发生,在仅仅3年的webapps工作中,我们使用ORM构建了便携式软件 (2认同)
  • 如果您想在内存数据库上运行测试,您可能会发现它很有用 (2认同)
  • 同一软件的多个实例可能使用不同的数据库。但实际上将现有数据从一种数据库软件转移到另一种数据库软件的情况很少发生。当它发生时,许多 ORM 实际上并不会帮助你。 (2认同)

cur*_*ork 5

发展幸福,IMO。ORM 抽象了许多必须在 SQL 中执行的裸机操作。它使您的代码库保持简单:需要管理的源文件更少,并且架构更改不需要数小时的维护。

我目前正在使用 ORM,它加快了我的开发速度。