【问题标题】:Javascript node.js ORM that follows data-mapper pattern遵循数据映射器模式的 Javascript node.js ORM
【发布时间】:2015-06-17 02:31:46
【问题描述】:

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

我看过的图书馆:

【问题讨论】:

  • 试试StrongLoop,您可以将类型映射到表并生成一个REST客户端,以与映射生成的REST API一起使用。不知道这是否是您要查找的内容,但将其作为评论放在那里不会有什么坏处吗? :)
  • @furier 它看起来不像 orm

标签: javascript node.js orm datamapper typeorm


【解决方案1】:

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

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

如果您考虑将 MongoDB 用于您的数据库 - Mongoose.js

【讨论】:

  • 实际上它在 javascript 中也很有意义。我已经使用过遵循活动记录模式的客户端 javascript 库,它们只是杀死了我的应用程序工具,我没有将相同的库重写为数据映射器样式
  • 活动记录和数据映射器是完全不同的模式,不同的设计。不管是 JavaScript 还是 Java,模式可能都是一样的。
【解决方案2】:

我为 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 的接口。node-data-mapper 是不过,无论如何它都不是 Doctrine 的 JavaScript 端口,而且接口有很大的不同。)查询接口使用 deferred 模块返回 Promise。

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

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

    • 感谢 @pleerock 提供令人惊叹的 TypeORM 库
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-17
    • 1970-01-01
    • 2010-10-05
    • 2013-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多