X.d 笔记

小Web,大世界

0%

开源自己写的 NodeJs ORM : oor

如题,最近需要用 ORM 来加速我的进度,感觉目前 NodeJs 可选的 ORM 都不太理想,于是自己动手写了一个,开源出来。

为了让这个框架看上去像模像样,我还做出了一些额外的努力,虽然不知道有啥用,但试试写一个正常项目的感觉吧。

  1. 做了一个网站 :https://oor.xdnote.com ,写了很多文档.
  2. 英文优先,所有注释都用英文来写,README.md 也是优先英文.
  3. 花了很多时间写单元测试,核心逻辑全覆盖。

想了解可去看下 说明文档, 源码在 Githhub ,支持给个 Star 就好。

为什么要自己弄一个ORM

以前也用过不少 ORM 框架,主要有以下问题

  1. 大多比较麻烦,尤其是 Java ,XML,Entity, Mapper,DAO , 一大堆玩意,改个字段都会让写代码的心情不好。
  2. 文档太复杂,一个框架里面有几十页的文档,用起来都不敢不看。(oor 的文档就三页,半小时全部看完)
  3. 提供了太多 屠龙之术 ,虽然强大,但 80% 的高级内容,可能 80% 的人并不需要。
  4. 性能低下,一些 ORM 内部验证,处理,转换,效率太低,浪费计算资源。
  5. 认知负担重,部分 ORM 框架为了彰显 强大,还出自己专用的语法库等。

正因为上面一些原因,一直有一派,坚持不使用 ORM ,只用 SQL, 代价就是写起来慢点,获得查询性能的一些提升。

ORM 为什么慢

  1. ORM 需要构造对象,比如在 MyBatis 里面,就用到很多反射,序列化,注入等。
  2. ORM 需要将 API 的入参,最终转换成 SQL, 转换效率各有不同。
  3. ORM 需要考虑各种兼容性,横向的有几十种数据库,纵向需要有 CRUD, JOIN, 一对多,多对多各种结构,事务管理等,内部非常复杂。

其实我们用的数据库,也就那么一两个,而使用的方法,大部分都是一些基础操作。

实际上见过这么多项目能用上 ORM 高级特性的寥寥无几,真用的时候,还是通过手动档来实现。

能提升吗

这也是我写 oor 的理由,目前通过两方面来保障计算量最小化:

  1. 只支持 PostgreSql , Elastic Search, MySql !
  2. 只支持 CRUD, 对于标准ORM 声称的 “标准特性” 直接抛弃

人个认为 : ORM 只提供基础功能,性能要快,省下80%的重复劳动就行,剩下20%请开发人员自己动手

需要做到:

  1. 性能必须要快 - 方便单元测试,降低资源消耗
  2. API必须要简单 - 不看文档,能看得懂英语就行

还有一些业务上理由

平时做项目时,经常遇到一些 “非标准” 的需求:

  1. 数据表里面有 create_time, last_update_time 这样的字段,插入修改数据时自动给值
  2. 数据表里面有 status 这样的字段,删除时,要使用 update state=999, 不能真删
  3. 数据表里面有 org 这样的字段,查询时数据不能查询本 org 之外的数据
  4. 甲方安全意识强,且“学识丰富”,极其苛刻的XSS(特殊字符校验)需求。

像这样的需求,标准 ORM 肯定不会提供,只会提供一些标准接口,自己写逻辑,如果用的少还可以写下,用的多了,代码也不美观。

oor 支持(或添加式扩展)这些功能,保护代码的易阅读性,不需要再为这些 “奇怪的” 设定而伤脑筋降低开发人员的认知负担,减少出错率。

由于基本不考虑兼容性,目前代码的转换性能消耗约可以忽略不计!

可以骄傲的说,这一点是其它任何 ORM 框架都没有的, OOR 支持 Elastic Search !

API 与 PG 完全一模一样,无入门门槛使用 Elastic Search 的 CRUD 功能!

另外可以骄傲说的一个点:本 ORM 使用起来也最现在所有 ORM 框架中最简单的,没有之一!可以极大程度的省掉你的时间,和代码行数!

再次求 Star

第一次把项目做的有模有样的冲动,如果支持可以给我个 Star,谢谢!

Githhub