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



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

我看过的图书馆:

  • http://docs.sequelizejs.com/
  • https://github.com/dresende/node-orm2
  • http://bookshelfjs.org/
  • 其他一些

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

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

我也尽了最大努力使它具有容错性。代码覆盖率为100%,虽然我知道这并不能证明没有缺陷,但我确实尽可能彻底地进行了测试。

我在条令1之后对接口进行了非常松散的建模。(我已经广泛使用了LINQ、Doctrine 1和2以及Hibernate,在这些ORM中,我最喜欢Doctrine 2的接口。不过,节点数据映射器无论如何都不是Doctrine的JavaScript端口,接口也有很大不同。)查询接口使用延迟模块返回promise。

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

不管怎样,这个模块是我在个人项目中使用的,但我很想从社区中的其他开发人员那里得到一些反馈!我试着提供大量的例子来让人们快速行动起来。目前该模块只支持MySQL,但我正在添加对MSSQL的支持。

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

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

如果你考虑将MongoDB作为你的DB-Mongoose.js.

最新更新