是否值得使用 ORM

Is it worth using ORM

我正在使用项目的查询生成器 knex,但是我 运行 在使用连接时遇到了问题,您必须手动匹配相关数据或执行单独的查询并绑定相关数据,所以我我正在考虑使用 ORM,但在某个地方我听说它们速度较慢并且在后台使用循环进行查询,我使用 nodejs 因此它可以阻止线程,因此是否值得使用 ORM 或更好的自己配对连接数据?

您应该尝试使用 ORM 和不使用 ORM 的普通 SQL。你会发现 99% [1] 的时间你会更好地使用 ORM。很少有项目简单到使用ORM没有好处。

你听到的人是错误的,或者他们使用的是错误的 ORM,或者他们没有正确使用他们选择的 ORM。好的 ORM 对其数据方法的实现进行了很好的调整,使用图形算法来确定最佳查询数量,以获取请求的数据以及它们与尽可能少的查询之间的关系。它不会阻塞事件循环,除非你自己在查询生命周期挂钩中做了一些缓慢的阻塞代码。

我多次遇到这种对 ORM 的误解,认为它们会限制您进行高效查询的能力,但并非所有 ORM 都是如此。

Node.js 有一些轻量级的 ORM,可以很容易地完成常见的 ORMy 任务,但它们不会强迫你抽象 SQL 。您仍将拥有 SQL 的全部功能,甚至在您需要时随时掌握原始查询,但与普通的 SQL.[= 相比,您可以更轻松地处理关系。 10=]

例如,您可以有效地读取/写入嵌套 JSON 结构,并使用单行轻松填充多个表,并从数据库中读取嵌套数据,而无需找出优化所需查询数量的图形算法获取相关数据并从平面查询结果构造嵌套数据。

最后,如果您不使用任何 ORM 和自定义助手集,其他人将更难进入该代码库,因为它将充满自定义普通 SQL + 各种助手。

免责声明:我有偏见(并且知道我在说什么),因为过去几年我一直在维护 knex 查询构建器并且我参与了唯一轻量级的开发 Node.js我可以推荐的 ORM:objection.js

[1] 斯泰森-哈里森 1987