调研探索
在 TypeScript 项目中使用 Prisma ORM…
适用于 TypeScript + Prisma ORM 项目的数据库 schema 设计、迁移、客户端查询、错误处理和测试规范落地。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 38/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 60/100 ×0.15
适用场景
在 TypeScript 项目中使用 P特定
解决思路
- 为变量和函数始终声明显式类型。
- 避免使用 'any'。
- 为公共 API 编写并使用 JSDoc。
- 每个文件只维护单一导出。
- 优先编写自文档化代码。
- 类/接口使用 PascalCase 命名。
- 变量和方法使用 camelCase 命名。
- 文件和目录使用 kebab-case 命名。
- 常量使用 UPPERCASE 命名。
- 布尔值使用基于动词的名称,如 isLoading、hasError、canDelete。
- 每个函数尽量少于 20 行代码。
- 每个函数只承担单一职责。
- 使用提前返回。
- 将复杂逻辑抽取到独立函数中。
- 利用函数式模式(map、filter、reduce)。
- 多个参数时使用对象参数。
- 将数据封装到复合类型中,并优先使用不可变数据。
- 适当使用 `readonly` 和 `as const`。
- 在边界处校验数据。
- 使用具体、描述性的错误类型,并附带上上下文信息的消息。
- 模型和字段采用领域驱动命名。
- 使用 `@relation` 显式声明关系。
- 在合适处使用规范化结构。
- 通过 `deletedAt` 字段实现软删除。
- 对数据库特定类型使用原生类型装饰器。
- 始终使用类型安全的 Prisma Client 操作。
- 对复杂流程使用事务。
- 为日志、软删除和审计实现 middleware。
- 谨慎使用 `select` 和 `include`,避免过度获取数据。
- 创建描述性强、命名清晰的迁移。
- 绝不修改已有迁移。
- 确保所有迁移具备幂等性。
- 在生产前先在 staging 环境测试迁移。
- 对约束冲突捕获 `PrismaClientKnownRequestError`。
- 对意外数据库错误处理 `PrismaClientUnknownRequestError`。
- 对 schema 不匹配使用 `PrismaClientValidationError` 进行校验和处理。
- 通过适当的预加载(eager loading)避免 N+1 查询。
- 使用内存数据库进行测试以提升速度。
- 为单元测试隔离而 mock Prisma Client。
- 绝不在 API 中暴露原始 Prisma Client。
- 在数据库操作前校验所有用户输入。
- 遵循 SOLID 原则,优先使用组合而非继承。
适用边界 · 注意事项
- 项目不使用 Prisma ORM 或 TypeScript 时,这些 Prisma/TypeScript 专属规范不直接适用。
- 使用其他 ORM 或查询构建器(如 TypeORM、Drizzle)时,应改用对应工具的 schema、迁移和客户端实践。
- 无法引入 Prisma schema/migration 流程或要求完全避免特定 ORM 依赖时,不适合直接套用。