معماری تمیز و قابل تست
NestJS از همون ابتدا حول محور Dependency Injection طراحی شده (الهامگرفته از معماری Angular). بهجای اینکه توی هر کلاس دستی یه سرویس رو
new کنی، فقط اعلام میکنی به چی نیاز داری، و NestJS خودش نمونهٔ مناسب رو در زمان اجرا بهت تزریق میکنه.قلب ماجرا دو چیز هست:
دکوریتور
@Injectable() که یه کلاس رو بهعنوان provider معرفی میکنه، و تزریق از طریق constructor. این کار باعث میشه سرویسها از هم decoupled بمونن و وابستگیها بهجای پنهون شدن توی کد، توی امضای کلاس واضح و قابل مشاهده باشن.نکتهای که خیلیا بلد نیستن، custom providerها هستن. با
useValue، useClass یا useFactory میتونی یه توکن سفارشی تعریف کنی و بسته به شرایط (مثلاً محیط dev یا prod) پیادهسازی متفاوتی بهش وصل کنی، بدون اینکه کد مصرفکننده تغییری کنه.فایده بزرگ دیگهاش تستپذیریـه. توی تستها با
overrideProvider میتونی یه سرویس واقعی (مثلاً اتصال به دیتابیس) رو با یه mock جایگزین کنی، دقیقاً مثل الگوی مشابهش توی فریمورکهای دیگه.@Injectable()
export class UsersService {
findOne(id: number) {
return { id, name: 'Ali' };
}
}
@Controller('users')
export class UsersController {
constructor(private readonly usersService: UsersService) {}
@Get(':id')
findOne(@Param('id') id: number) {
return this.usersService.findOne(id);
}
}
توی NestJS v12 (منتشرشده اوت ۲۰۲۶)، همین معماری DI حالا با پکیجهای ESM-ready و پشتیبانی رسمی از Standard Schema برای validation ترکیب شده و پایهی بخش جدید observability هم همینه.
#برنامه_نویسی #جاوااسکریپت #NestJS #بک_اند #تایپ_اسکریپت
کانال آموزشی کدنایت | آموزش برنامه نویسی
🆔 @codenight_ir