نست فریمورکی برای ساختن اپلیکشن های بک اند در NodeJs هست که با TypeScript ساخته شده و بطور کامل ازش پشتیبانی میکنه و همچنین قابلیت های کار با وب سوکت، GraphQl ،Rest و ... رو برامون فراهم میکنه.
در لایه های زیرین خودش از فریمورک ExpressJs بطور پیشفرض استفاده میکنه و همچنین میتونید بجای اکسپرس از Fastify هم استفاده کنید. در واقع یک لایه ابسترکشن روی فریمورکهای express یا fastify هست و در عین حال امکان این رو بهمون میده که مستقیما با api های این فریمورک ها هم کار کنیم و خوبیش اینه که میتونیم از لایبری ها و ماژول هایی که برای این فریمورک ها هست به راحتی استفاده کنیم.
چرا بجای اکسپرس از نست استفاده کنیم؟
یکی از دلایل میشه گفت وجود نداشتن ساختار و استانداردی در پروژه های nodejs هست. هر موقع که وارد یک پروژه جدید نود میشیم احتمال زیاد با یک ساختار متفاوت رو به رو میشیم مثلا بعضی ها ممکنه فقط از یک فایل استفاده کرده باشند ! یا بعضیا از معماری MVC و خیلی چیزای دیگه. این حالت بیشتر واسه کسایی که تازه کار هستن و زیاد با معماری ها و ساختارها آشنا نیستن میتونه گیج کننده باشه و در کل احتمال تولید کد کثیف و غیرقابل نگهداری با گذشت زمان بیشتر میشه که در نهایت کار توسعه رو سخت تر و زمانبر میکنه.
نست فقط یک ساختار و معماری رو بهمون معرفی میکنه و میگه که فقط توی این قالب و استایل کد بزنین.
کامپوننت ها معماری یک اپلیکشن نست به این صورته:
- کنترلر ها (Controllers)
- ماژول ها (Modules)
- پروایدر Provider ها (services, repositories, factories, helpers , ...)
- کلاس های DTO
- کلاس های مدل (Entities)
دلیل اصلی استفاده از این معماری و ساختار این هست که اپلیکشن رو به بخش های کوچیکی بشکنیم. یادگیری و کارکردن به این شیوه برای کسایی که انگولار یا spring boot کار کردن میتونه ساده باشه.
در ادامه به معرفی این کامپوننت ها بصورت اجمالی میپردازیم.
کنترلر ها (Controllers):
هدف اصلی دریافت درخواست از کاربر یا هرچیزی دیگه ای هست و فرستادنش به کامپوننت سرویس ها (business logic) برای انجام کار مورد نظر و سپس برگرداندن پاسخ.
ماژول ها (Modules):
ماژول مثل یک کانتینر هست که بقیه بخش هایی که بهم مرتبط هستن رو در خودش نگه میداره .
مثلا یک ماژول بنام user فقط شامل سرویس ها و کنترل ها و ... مخصوص و مرتبط کار با یوزر هاست و به این صورت بخش های مختلف اپ رو جداسازی میکنه.
پروایدر ها Providers:
این بخش مقداری عمومی هستش و میتونه شامل ریپازیتوری مدل های دیتابیس، سرویس، کلاس های helper و ... باشه. ایده کلی پرواید ها اینه که میتونه در جاهای مختلف به صورت وابستگی تزریق بشه، مثل یک کانکشن دیتابیس که میتونه در بخش ها و کلاس های مختلفی تزریق بشه و امکان کار کردن با دیتابیس رو بده. در واقع سرویس ها شامل business logic و منطق برنامه هستن که میتونن در هرجایی استفاده بشن.
کلاس های DTO:
این بخش که مخفف Data Transfer Object هست یک ساختار و فرمت برای داده هایی که در یک اندپوینت (route) از کاربر دریافت میشه تعیین میکنه. مثلا میخواید که کاربر سن رو بصورت عدد براتون بفرسته یا نام بصورت یک رشته باشه. که با ترکیب اینها با لایبری هایی مثل class-validator میتونیم بعنوان ولیدشن هایی قوی ازشون استفاده کنیم و داده های ورودی کاربر رو کنترل کنیم.
مدل ها (Entities):
مدل ها جایی هستن که اطلاعات مربوط به دیتابیس رو توی اون ها میسازیم مثلا با استفاده از typeorm که یک ORM کاملا سازگار با تایپ اسکریپت هست میتونیم یک کلاس مدل بسازیم و جدول دیتابیس رو بدون یک خط کد SQL و فقط با کد تایپ اسکریپت درست کنیم.
سخن پایانی:
این فریمورک استاداردها و استایلی رو جلوی پامون میزاره که باعث افزایش کارایی کدنویسی میشه و ممکنه که در نگاه اول سخت بنظر بیاد ولی وقتی که یادش گرفتید درکنار تایپ اسکریپت میتونه به سرعت کدنویسی، خوانایی، ساختار منظم، نگهداری کد و ... کمک زیادی کنه.
میتونید به سایت nestjs مراجعه کنید که داکیومنتش خیلی خوب توضیح داده و به راحتی میتونید از اونجا یاد بگیرید.