Builders Academy
Clean Architecture avec Node.js
3 of 5

Chapitre 1 · Leçon 3

Result monad

Remplacer les exceptions implicites par des erreurs typées

Les exceptions throw rendent le flux d'erreurs invisible dans la signature des fonctions. Le Result<T, E> monad rend les erreurs explicites et force le caller à les gérer.

GetTutorialBySlug.usecase.ts

typescript
1async execute(slug: string): Promise<Result<Tutorial, NotFoundError>> {
2  const tutorial = await this.repo.findBySlug(slug);
3
4  if (!tutorial) {
5    return Result.fail(new NotFoundError('Tutorial', slug));
6  }
7
8  return Result.ok(tutorial);
9}
10
11// Dans le controller — le compilateur force la vérification
12const result = await useCase.execute(slug);
13if (result.isFail) return next(result.getError()); // 404 typé
14res.json(result.getValue()); // Tutorial garanti ici
Quand NE PAS utiliser Result

Les erreurs inattendues (crash DB, bug de programmation) doivent remonter comme exceptions normales. Result est pour les erreurs métier prévues : not found, validation, conflit.

Topics and skills covered

  • Error handling
  • TypeScript