在 GEO 项目里,后端用的是 NestJS + Prisma。这套组合的优点不是"新",而是边界清晰:框架替你把分层想好了,你只要别乱跨层。
模块 > 文件夹
NestJS 的 Module 是天然的边界。一个业务域一个 module,对外只暴露 service,controller 只管收发。别让 controller 直接碰 PrismaClient——那是数据层的私事。
// 推荐:service 封装数据访问 @Injectable() export class IntentService { constructor(private prisma: PrismaService) {} findRegion(id: string) { return this.prisma.regionIntent.findUnique({ where: { id } }); } }
Prisma 的两个习惯
- 把
PrismaService做成可注入的 provider,而不是到处new PrismaClient(); - schema 改动走 migration,别手动改库——多环境时对账会哭。
边界的意义
当项目从"几个人"长到"好几条业务线",真正救你的不是某个炫技写法,而是谁不能碰谁。分层越清晰,改一处时心越不慌。
可维护性不是写出来的,是边界画出来的。