Module 03 ⭐⭐⭐ Difficile ~3h

🏗️ App Blog — Architecture Modulaire

Architecturer une application blog complète en modules bien découplés : CoreModule, UsersModule, PostsModule, CommentsModule, MailModule. Maîtriser imports, exports et DI avancée.

🏛️ Architecture cible

AppModule
├── CoreModule (@Global) — Logger, Config
├── UsersModule — exports: UsersService
│   └── imports: MailModule
├── PostsModule — imports: UsersModule
│   └── imports: CommentsModule (re-export)
├── CommentsModule — imports: UsersModule, PostsModule (forwardRef)
└── MailModule (DynamicModule.register()) — exports: MailService

🔧 Code de démarrage

// mail.module.ts — module dynamique
@Module({})
export class MailModule {
  static register(options: { from: string; transport: string }): DynamicModule {
    return {
      module: MailModule,
      providers: [
        { provide: 'MAIL_OPTIONS', useValue: options },
        MailService,
      ],
      exports: [MailService],
    };
  }
}

// core.module.ts — module global
@Global()
@Module({
  providers: [LoggerService, AppConfigService],
  exports: [LoggerService, AppConfigService],
})
export class CoreModule {}

// app.module.ts — assemblage
@Module({
  imports: [
    CoreModule,
    MailModule.register({ from: 'noreply@blog.com', transport: process.env.SMTP_URL }),
    UsersModule,
    PostsModule,
    CommentsModule,
  ],
})
export class AppModule {}

✅ Fonctionnalités

← Cours ✏️ Exercices 🧠 QCM NS03 Module 04 →