Lecture-4: NestJS Modules: A Powerful Way to Manage Dependencies and Features

NestJS এর একটি মৌলিক ধারণা হল মডিউল। এটি একটি class যা @Module decorator দ্বারা annotated থাকে। Module basically NestJS application এর structure organize করতে সাহায্য করে। প্রতিটি application এ at least একটি module থাকে তা হল root module। Root মডিউলে হল NestJS application এর starting point।

@Module() decorator এর property গুলো হচ্ছে :

  • providers
  • controllers
  • imports
  • exports

Providers আর Controller নিয়ে আমরা আগেই আলোচনা করেছি। Recap এর জন্য আগের lecture দেখে আসতে পারেন।

Imports এ আমরা কিছু dependent module list import করতে পারি যা আপনার current module এ dependent।

Exports হল subset of providers যা আপনার current module এর provider এ add করা হয়েছে। Export এ আপনি যদি কোনো provider add করেন যা কিনা আপনার current module এ add করা আছে। তাহলে অন্য কোনো module যদি আপনার current module কে import এ add করে সেই module তাহলে direct exported provider এর access পাবে।

Module by default provider দের encapsulate করে ফেলে।

NestJS Module Example

ProductController এবং ProductService এর business domain একই , তাই এই product controller এবং service একই module এ রাখা হয়েছে।

import { Module } from '@nestjs/common';
import { ProductController } from './product.controller';
import { ProductService } from './product.service';

@Module({
  controllers: [ProductController],
  providers: [ProductService],
})
export class ProductModule {}

Module এর কিছু features

Shared modules

NestJS এ module হল singletons অর্থাৎ একটি মাত্র object create করে। তাই আপনি যদি চান তাহলে same object instance share করতে পারেন। এই জন্য আপনাকে ওই component টি exports দিতে হবে , তাহলেই আপনার instance টি share হয়ে যাবে।

@Module({
  controllers: [ProductController],
  providers: [ProductService],
  exports: [ProductService],
})
export class ProductModule {}

Module re-exporting

অনেক সময় আমাদের কিছু module এর instance শেয়ার করতে হতে পারে। এই feature কে NestJS এর Re-export বলা হয়।

@Module({
  imports: [GenericModule],
  exports: [GenericModule],
})
export class SampleModule {}

Global modules

যদি কোনো module অন্যসব module এ import করতে হয় তাহলে আমাদের একই module বার বার import করতে হবে জিনিষটা খুবই বিরক্তিকর। এই কাজের জন্য আমরা @Global() decorator ব্যবহার করতে হবে।