widmaker666 / WebinaireCleanArchiBackend

Construire une appli de webinaire en backend grâce à la clean archi
0 stars 0 forks source link

Axe d’amélioration #1

Open sainple0001 opened 7 months ago

sainple0001 commented 7 months ago

Remarques sur l'implémentation de la Clean Architecture dans le projet NestJS

Description du Problème

Actuellement, plusieurs aspects de l'implémentation du projet NestJS ne respectent pas les meilleures pratiques recommandées. Ces points incluent l'absence de noms de route au niveau du contrôleur, l'absence d'annotations ApiOperation et ApiResponse, le manque de gestion des erreurs avec des clauses try-catch, l'absence d'exceptions spécifiques au projet, et la configuration non optimale du compilateur TypeScript. Les interfaces, enum, types, DTO, etc., sont directement codés dans les classes au lieu d'être regroupés dans des dossiers spécifiques tels que 'Model'.

Recommandations

Noms de Route et Annotations Swagger

Ajouter des noms de route significatifs au niveau des contrôleurs et utiliser les annotations ApiOperation et ApiResponse pour documenter de manière appropriée les API.

Gestion des Erreurs

Introduire des blocs try-catch pour la gestion robuste des erreurs et des exceptions spécifiques au projet.

Configuration TypeScript

Configurer le compilateur TypeScript avec les options suivantes :

Proposition de Changement

Exemple de Noms de Route et Annotations Swagger

// Avant
@Controller()
export class AppController {
  @Get()
  findAll(): string {
    return 'This action returns all items';
  }
}
// Après
@Controller('items')
@ApiTags('Items')
export class AppController {
  @Get()
  @ApiOperation({ operationId: 'findAll' , description: 'Get all items' })
  @ApiResponse({ status: 200, description: 'Successfully retrieved items' })
  findAll(): string {
    return 'This action returns all items';
  }
}

Configuration TypeScript

{
  "compilerOptions": {
    "strictNullChecks": true,
    "noImplicitAny": true,
  }
}

Avantages

  1. Amélioration de la documentation des API avec Swagger:

    • Swagger permet une documentation claire et structurée des API, facilitant la compréhension et l'utilisation.
  2. Renforcement de la gestion des erreurs:

    • L'implémentation de blocs try-catch améliore la gestion des erreurs, assurant une meilleure robustesse du code.
  3. Amélioration de la sécurité et de la robustesse du code grâce à des exceptions spécifiques:

    • L'utilisation d'exceptions spécifiques contribue à renforcer la sécurité et la fiabilité du code en traitant les erreurs de manière ciblée.
  4. Déplacement toutes les interfaces, enum, types, DTO, etc.

    • Amélioration de la lisibilité du code.
    • Respect des principes de Clean Architecture.
    • Facilitation de la maintenance du projet.
  5. Configuration TypeScript optimisée:

    • La configuration optimisée du fichier tsconfig.json permet d'exploiter au mieux les fonctionnalités de TypeScript, améliorant ainsi la qualité du code.

Tâches Associées

  1. Ajouter des noms de route et des annotations Swagger aux contrôleurs:

    • Enrichir la documentation en ajoutant des informations spécifiques sur les routes et les contrôleurs via Swagger.
  2. Implémenter la gestion des erreurs avec des blocs try-catch:

    • Renforcer la gestion des erreurs en mettant en place des blocs try-catch dans le code pour une réaction appropriée en cas d'incident.
  3. Configurer le fichier tsconfig.json avec les options recommandées:

    • Optimiser la configuration TypeScript en suivant les recommandations, assurant ainsi une utilisation efficace des fonctionnalités du langage.
  4. Déplacer les interfaces, enum, types, DTO, etc., dans les dossiers appropriés.

    • Mettre à jour les références dans le code pour refléter la nouvelle structure.

Discussion

J'ouvre cette issue pour discuter des avantages mentionnés

widmaker666 commented 7 months ago

Merci des conseils, mais c'est une formation que je suivais et j'ai laissé ça de côté pour l'instant car trop complexe pour moi. Je suis au début et je recommence sur archi hexagonale simple en node ts express et tdd.

Je reprendrais ça quand j'aurai appris nestjs aussi ...

Merci de ton message.