توسعه دهنده وب | متخصص ری اکت و نکست | طراح سایت | راه ارتباطی در نظرات
🔌 اتصال به پایگاه داده در NestJS؛ از TypeORM تا Prisma
در دنیای توسعه بکاند، اتصال به پایگاه داده یکی از مهمترین بخشهای هر پروژه است. NestJS با پشتیبانی از ابزارهای قدرتمند مانند TypeORM و Prisma، امکان مدیریت دادهها را به شکلی ساختاریافته، امن و قابل توسعه فراهم میکند. در این مقاله، به بررسی روشهای اتصال به پایگاه داده، مدیریت مدلها و ارتباطات، و استفاده از الگوهای مهاجرت و Repository در NestJS میپردازیم.

🧱 استفاده از TypeORM و Prisma
NestJS به صورت رسمی از TypeORM پشتیبانی میکند و همچنین با Prisma نیز کاملاً سازگار است. هر دو ابزار برای مدیریت پایگاه دادههای رابطهای مانند PostgreSQL، MySQL، و SQLite استفاده میشوند، اما رویکرد متفاوتی دارند.
TypeORM: یک ORM کلاسیک با انعطاف بالا
TypeORM یک ORM کامل برای TypeScript است که به توسعهدهندگان اجازه میدهد مدلهای داده را با استفاده از کلاسها و Decoratorها تعریف کنند. این ابزار به خوبی با معماری NestJS هماهنگ است و از تزریق وابستگی، Repository Pattern، و مهاجرتها پشتیبانی میکند.
مثال تعریف یک موجودیت (Entity):
`typescript
@Entity()
export class User {
@PrimaryGeneratedColumn()
id: number;
@Column()
name: string;
}
`
Prisma: نسل جدید ORM با سرعت و دقت بالا
Prisma یک ORM مدرن است که از فایلهای schema برای تعریف مدلها استفاده میکند. این ابزار با تمرکز بر عملکرد بالا، تایپگذاری دقیق، و تجربه توسعهدهنده، محبوبیت زیادی پیدا کرده است. Prisma بهخصوص برای پروژههایی که نیاز به تعامل پیچیده با پایگاه داده دارند، بسیار مناسب است.
مثال تعریف مدل در Prisma:
`prisma
model User {
id Int @id @default(autoincrement())
name String
}
`
هر دو ابزار مزایا و معایب خاص خود را دارند، اما NestJS این امکان را فراهم کرده که بسته به نیاز پروژه، از هرکدام استفاده کنید.
🔗 مدیریت ارتباطات و مدلهای داده
در پروژههای واقعی، موجودیتها معمولاً با یکدیگر ارتباط دارند. NestJS با استفاده از TypeORM یا Prisma، امکان تعریف انواع ارتباطات مانند One-to-One، One-to-Many، و Many-to-Many را فراهم میکند.
در TypeORM:
`typescript
@Entity()
export class Post {
@PrimaryGeneratedColumn()
id: number;
@ManyToOne(() => User, user => user.posts)
author: User;
}
`
در Prisma:
`prisma
model Post {
id Int @id @default(autoincrement())
title String
author User @relation(fields: [authorId], references: [id])
authorId Int
}
`
مدیریت ارتباطات به توسعهدهنده این امکان را میدهد که دادهها را به صورت ساختاریافته و منطقی ذخیره و بازیابی کند. همچنین، NestJS با استفاده از سرویسها و Repositoryها، این ارتباطات را به صورت تمیز و قابل تست مدیریت میکند.
🛠️ مهاجرتها و Repository Pattern
مهاجرتها: تغییرات کنترلشده در ساختار پایگاه داده
مهاجرتها (Migrations) ابزاری هستند برای اعمال تغییرات در ساختار پایگاه داده به صورت مرحلهای و قابل پیگیری. NestJS با TypeORM و Prisma امکان اجرای مهاجرتها را فراهم میکند.
در TypeORM:
`bash
npx typeorm migration:create -n AddUserTable
npx typeorm migration:run
`
در Prisma:
`bash
npx prisma migrate dev --name init
`
مهاجرتها به توسعهدهنده کمک میکنند تا تغییرات پایگاه داده را به صورت کنترلشده و قابل بازگشت اعمال کند، بدون اینکه دادههای موجود از بین بروند.
Repository Pattern: جداسازی منطق داده از منطق تجاری
Repository Pattern یکی از الگوهای طراحی محبوب در NestJS است که به توسعهدهنده اجازه میدهد منطق دسترسی به دادهها را از منطق تجاری جدا کند. این الگو باعث افزایش تستپذیری، خوانایی، و انعطافپذیری کد میشود.
در TypeORM، میتوان از Repositoryها به صورت زیر استفاده کرد:
`typescript
@Injectable()
export class UserService {
constructor(
@InjectRepository(User)
private userRepository: Repository<User>,
) {}
async findAll(): Promise<User[]> {
return this.userRepository.find();
}
}
`
در Prisma، معمولاً از Client مستقیم استفاده میشود، اما میتوان الگوی Repository را به صورت دستی پیادهسازی کرد.
✨ نتیجهگیری
اتصال به پایگاه داده در NestJS نهتنها ساده و سریع است، بلکه با ابزارهایی مانند TypeORM و Prisma، به توسعهدهنده امکان مدیریت حرفهای دادهها را میدهد. با استفاده از مدلهای دقیق، ارتباطات منطقی، مهاجرتهای کنترلشده، و الگوی Repository، میتوان پروژههایی ساخت که هم قابل توسعه باشند و هم
قابل نگهداری.
اگر به دنبال ساخت بکاندی قدرتمند و مدرن هستی، NestJS با این ابزارها میتونه ستون فقرات پروژهات باشه.
مطلبی دیگر از این انتشارات
آموزش و آشنایی سریع با تیلویند Tailwind CSS
مطلبی دیگر از این انتشارات
اصول کدنویسی تمیز (Clean Code): راهنمایی برای نوشتن کد خوانا و قابل نگهداری
مطلبی دیگر از این انتشارات
یادگیری تسلط Mastery Learning چیست و چگونه در کدنویسی کاربرد دارد؟