Prisma是Node.js与TypeScript的ORM框架

21-04-21 banq

使用数据库是应用程序开发中最具挑战性的领域之一。数据建模,模式迁移和编写数据库查询是应用程序开发人员每天处理的常见任务。

Node.js生态系统虽然在构建数据库支持的应用程序中越来越流行,但并未为应用程序开发人员提供处理这些任务的现代工具。

应用程序开发人员应该关心数据,而不是SQL。

随着工具变得更加专业化,应用程序开发人员应该能够专注于为组织实现增值功能,而不是花费时间通过编写胶合代码来遍历应用程序的各个层。

使用Prisma时,您可以在Prisma模式中定义数据模型。以下是Prisma模型的样例:

model Post {
  id        Int     @id @default(autoincrement())
  title     String
  content   String?
  published Boolean @default(false)
  author    User?   @relation(fields: [authorId], references: [id])
  authorId  Int?
}

model User {
  id    Int     @id @default(autoincrement())
  email String  @unique
  name  String?
  posts Post[]
}

这些模型中的每一个都映射到基础数据库中的表,并充当Prisma Client提供的生成的数据访问API的基础。Prisma的VS Code扩展提供语法高亮显示,自动完成,快速修复和许多其他功能,使数据建模具有神奇而令人愉悦的体验

 

黑客新闻网友评论

我过去曾经使用过Django,SQLAlchemy,Sequelize,Knex和TypeORM,我喜欢Prisma。极其强大的类型安全性使Sequelize看起来像个玩笑。查询引擎本身以rust编写,可在事件循环的每个周期内组合并优化查询,因此GraphQL N + 1问题已成为过去。

此外,它背后的团队和社区也很棒!我从没想到在ORM背后建立活跃的开发人员社区会很重要,但是由于Sequelize-Typescript的作者被迫于去年下半年放弃,而TypeORM的作者也缺席了,Prisma让人感到新鲜。我真的希望他们能找到一种方法来建立可持续的业务。支持程序包,功能开发合同,以及一些使他们在财务上受到激励的东西,以使其不断完善。

 

我使用Prisma已有一段时间了,我非常喜欢。我使用过的TypeScript最佳ORM。我最大的问题是可测试性。

当然,我可以在Jest或其他测试中模拟Prisma客户端,但是如果我想测试状态,则几乎必须使用JS模拟来重新实现内存数据库。我还可以连接到用于测试的真实数据库,但这实在太过分了,我通常对测试Prisma本身不感兴趣,仅对我自己的代码感兴趣。我希望Prisma具有测试模式,在此模式下,您可以使用临时内存SQLite DB替换客户端,而无需编写大量的样板文件。

 

“应用程序开发人员应该关心数据,而不是SQL”? 任何被ORM生成低效的SQL(并随后不得不学习和关心SQL)所咬伤的人都知道这种说法是不正确的。

  

我在最新项目中采用了Prisma,对此我有不同的感觉。

-生成的客户端是顶级的。在TypeScript中完全指定了可以由用户扩展的智能类型。

-模式语言很棒。它提供了可以完整地表达您的数据库结构的凝聚力体验,并且还提供了管理该结构的演变的迁移框架。

-在模型级别没有实现访问控制的钩子,因此您最终需要围绕基本查询创建一个更高级别的API来自行实现这些查询,这是一笔相当大的投资。

棱镜不足之处在于测试。Prisma中的测试故事是您可以使用实时数据库,也可以在应用程序中完全排除对Prisma的所有调用。后者意味着您最终要为实现而不是行为编写一堆测试,或者最终要手动编写适合Prisma API的内存数据库。前者意味着您需要在每个测试用例之后完全重新创建数据库。

总而言之,我们可能不会放弃它,但是我将继续寻找更好的方法来测试我的端点。

 

TypeORM->经典ORM,是Node中的“默认”选择,但与Java存在的ORM或Django ORM之类相比,还不是很成熟。以我的经验,这不是一个了不起的库,事务管理有点痛苦,我已经看到了一些错误。

Knex->它可以工作,但不确定为什么要使用它而不是TypeORM

MikroORM->没有太多经验,我的一位同事真的很喜欢它,阅读它背后的原理,然后看看这是否对您有用,因为它有点自以为是

Slonik->从未使用过它,但可能是我在新项目中设置的。像许多人一样,我认为查询构建器是BS,而我更喜欢使用SQL:Slonik在为您提供常用的getOne / getMany实用程序的同时,使这一操作变得非常容易

我想尝试Prisma。

 

 

 

猜你喜欢