V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
zhennann
V2EX  ›  Node.js

Vona ORM 文档终于肝完了,欢迎拍砖

  •  
  •   zhennann · 21 小时 29 分钟前 · 590 次点击

    Vona ORM 是船新的 Node.js ORM 库。提供的多租户能力可以同时支持共享模式独立模式。首创 DTO 动态推断与生成能力,解放我们的双手,显著提升生产力。为什么敢说是首创,因为 Prisma 和 Drizzle 没有提供此能力,Java 系亦如是。

    Vona ORM 不仅提供基于静态关系的关联查询,还提供动态关系,从而适应大型业务系统所要求的灵活性和扩展性。

    此框架所规划的能力还有很多,就不再赘述,以免占用大家宝贵时间。因为功能多,所以,花了大量时间终于把文档肝出来了。感兴趣的,可以观摩一下,欢迎拍砖。👏

    文档地址: https://vona.js.org/zh/guide/techniques/orm/introduction.html

    5 条回复    2025-09-30 22:26:08 +08:00
    Ketteiron
        1
    Ketteiron  
       17 小时 55 分钟前   ❤️ 1
    我来拍砖了。

    > Prisma 和 Drizzle 没有提供此能力
    因为这是伪需求,java 写傻掉的 leader 才需要这种能力

    而且你这 ORM 与 Prisma/Drizzle 等 ORM 完全不是一条路,连比较的意义都没有。
    你的 ORM 依托于 Vona 框架本体,是一系列独家 API 和抽象的封装,并不是纯粹的框架无关 ORM 。

    zod 的 schema 原本是一等公民,你在自己框架里是将其作为二等公民
    findOne(@Arg.query('id') id: number) -> z.nmber()
    findOne(@Arg.query() query: DtoStudentInfo) -> z.object()
    多了一层被框架拘束的抽象与封装

    这个所谓的动态推断与生成 DTO ,为什么要手动重复指定返回值类型。
    ```
    @Api.body(v.array($Dto.get(() => ModelOrder, { include: { products: true } })))
    async findAll() {
    return this.scope.model.order.select({
    include: {
    products: true,
    },
    });
    }
    }
    ```
    DRY (Don't Repeat Yourself),你写的不是 TypeScript ,而是 Java ,或者说 SpringBoot 。
    想做新的 web 框架,还是多看看 hono 和 elysia 吧,面向类型才是正确方向,面向对象已经是旧时代的残党了,nestjs 这条路已经走到头了,像 adonisjs 之类的也只能走全栈这条路另辟蹊径。
    linecode
        2
    linecode  
       17 小时 38 分钟前   ❤️ 1
    DTO 感觉没啥用,还不如直接写一份 request 、response 的 schema ,还灵活,相当于直接把 openapi 文档也给写了
    Ketteiron
        3
    Ketteiron  
       17 小时 19 分钟前
    @linecode #2 fastify/tRPC 以及继承他们思想的 elysia/hono 就是这样做的,schema=校验方式=类型=接口文档,typescript 世界不需要 DTO/VO/POJO/XXXO 。
    zhennann
        4
    zhennann  
    OP
       15 小时 29 分钟前
    在开发后端 API 服务时,DTO 是进行参数验证、生成 Swagger 元数据的关键节点。如果不能像推断类型一样动态推断出 DTO ,那么,我们就仍然需要手工创建 DTO 。随着业务的增长,复杂的表间关系会让手工补充 DTO 的工作日益繁重。
    而 Vona ORM 首创 DTO 动态推断与生成能力,解放我们的双手,显著提升生产力。甚至可以说,对于构建更加优雅的 Node.js 后端框架而言,能够动态推断与生成 DTO ,是非常重要的里程碑。
    FlashEcho
        5
    FlashEcho  
       8 小时 56 分钟前
    你这一套 java 味太重了,那我为啥不用 sprinboot 和 mybatis
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   931 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 19ms · UTC 23:22 · PVG 07:22 · LAX 16:22 · JFK 19:22
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.