Javascript node.js 遵循数据映射器模式的 ORM

Javascript node.js ORM that follows data-mapper pattern

我一直在使用 ORM 的活动记录和数据映射器实现,足以了解在我的大型项目中使用活动记录实现的 ORM 的问题。现在我正在考虑将我的一个项目迁移到 node.js 并尝试找到我现在正在使用的类似工具。经过研究,我没有发现任何遵循数据映射器模式的 node.js ORM。他们都是活跃的记录。也许我遗漏了什么,你可以告诉我是否有一个不遵循活动记录模式的 node.js 的流行 ORM?

我看过的图书馆:

数据映射器模式和活动记录之间的区别在 JavaScript 等动态语言中没有真正意义。 通常数据映射器在类型化语言中更轻量级,但在 JS 中它并没有真正的区别。 在我的脑海中,我可以提到两个您可能不知道的非常受欢迎的项目:

Waterline.js 是一个 Sails 抽象,它在许多数据库系统之上工作得很好。

如果您考虑 MongoDB 作为您的数据库 - Mongoose.js.

我为 Node.js 编写了一个名为 node-data-mapper 的 ORM;可在此处获取:https://www.npmjs.com/package/node-data-mapper。它是 Node.js 的 ORM,使用数据映射器模式。开发人员在读取和写入数据库时​​使用普通的旧 JavaScript 对象。表之间的关系没有严格定义,这使得连接非常灵活——无论如何,在我看来——尽管有点冗长。实际的数据映射算法快速而简短,复杂度是线性的(从表格 DB 数据到规范化 JavaScript 对象的转换在一个循环中完成)。

我也尽了最大努力让它相当容错。有 100% 的代码覆盖率,虽然我知道这并不能证明没有缺陷,但我确实尝试了尽可能彻底的测试。

我在 Doctrine 1 之后对接口进行了非常松散的建模。(我相当广泛地使用了 LINQ、Doctrine 1 和 2 以及 Hibernate,在这些 ORM 中,我最喜欢 Doctrine 1 的接口。节点数据-无论如何,mapper 都不是 Doctrine 的 JavaScript 端口,而且接口明显不同。)查询接口 returns 承诺使用 deferred 模块。

我根据 MongoDB 的条件对条件(例如 WHERE 和 ON 子句)进行了建模。希望这能使条件更加直观,同时提供一种进行可重用查询的方法(具体来说,复杂的 SELECT 查询可以通过许多不同的方式安全地过滤)。条件被视为特定领域的语言,并被词法分析、解析和编译。

无论如何,该模块是我在个人项目中使用的东西,但我很乐意从社区中的其他开发人员那里得到一些反馈!我试图提供大量示例来帮助人们快速 运行 。目前该模块仅支持 MySQL,但我正在努力添加对 MSSQL 的支持。

在对 JavaScript 当前存在的 ORM 感到沮丧之后,我编写了自己的 ORM,它支持 TypeScript / ES6 / ES5 并遵循数据映射器模式和所有其他最佳实践 - [​​=10=]