Prisma是Node.js與TypeScript的ORM框架

banq發表於2021-04-21

使用資料庫是應用程式開發中最具挑戰性的領域之一。資料建模,模式遷移和編寫資料庫查詢是應用程式開發人員每天處理的常見任務。
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。
 




 


 

相關文章