Builders Academy
Clean Architecture — Découplage et Testabilité
1 of 2

Chapitre 1 · Leçon 1

Les 4 couches

La règle fondamentale : les dépendances vont vers l'intérieur

Section 1

La règle de dépendance

Step 1

Les cercles concentriques

Clean Architecture organise le code en cercles concentriques. La règle fondamentale : les dépendances ne pointent que vers l'intérieur. Le code du centre ne sait rien de l'extérieur.

snippet.typescript

typescript
1/*
2 * Clean Architecture — Les 4 couches (de l'intérieur vers l'extérieur)
3 *
4 * ┌────────────────────────────────────────────┐
5 * │  FRAMEWORKS & DRIVERS                       │ ← Express, Prisma, Sendgrid
6 * │  ┌────────────────────────────────────┐    │
7 * │  │  INTERFACE ADAPTERS                 │    │ ← Controllers, Presenters, Repos Impl
8 * │  │  ┌────────────────────────────┐    │    │
9 * │  │  │  USE CASES (Application)    │    │    │ ← Logique applicative
10 * │  │  │  ┌────────────────────┐    │    │    │
11 * │  │  │  │  ENTITIES (Domain) │    │    │    │ ← Règles métier pures
12 * │  │  │  └────────────────────┘    │    │    │
13 * │  │  └────────────────────────────┘    │    │
14 * │  └────────────────────────────────────┘    │
15 * └────────────────────────────────────────────┘
16 *
17 * ↑ Les flèches de dépendance pointent TOUJOURS vers l'intérieur
18 * Express dépend des Controllers, pas l'inverse
19 * Prisma dépend des Repositories, pas l'inverse
20 */
21
22// Structure dans un projet Node.js
23src/
24├── domain/                 // Entities — aucune dépendance externe
25│   ├── entities/
26│   │   ├── User.ts
27│   │   └── Tutorial.ts
28│   └── repositories/      // Interfaces (contrats)
29│       ├── IUserRepository.ts
30│       └── ITutorialRepository.ts
31│
32├── application/           // Use Cases
33│   └── usecases/
34│       ├── RegisterUser.ts
35│       └── GetTutorials.ts
36│
37├── infrastructure/        // Interface Adapters + Frameworks
38│   ├── repositories/      // Implémentations Prisma
39│   │   ├── PrismaUserRepository.ts
40│   │   └── PrismaTutorialRepository.ts
41│   ├── controllers/       // Express controllers
42│   │   ├── UserController.ts
43│   │   └── TutorialController.ts
44│   └── config/
45│       └── container.ts   // Injection de dépendances

Step 2

Implémenter un Use Case complet

Un Use Case orchestre les entités et les repositories pour accomplir une tâche applicative. Il ne sait rien d'Express ou de Prisma.

snippet.typescript

typescript
1/*
2 * Clean Architecture — Les 4 couches (de l'intérieur vers l'extérieur)
3 *
4 * ┌────────────────────────────────────────────┐
5 * │  FRAMEWORKS & DRIVERS                       │ ← Express, Prisma, Sendgrid
6 * │  ┌────────────────────────────────────┐    │
7 * │  │  INTERFACE ADAPTERS                 │    │ ← Controllers, Presenters, Repos Impl
8 * │  │  ┌────────────────────────────┐    │    │
9 * │  │  │  USE CASES (Application)    │    │    │ ← Logique applicative
10 * │  │  │  ┌────────────────────┐    │    │    │
11 * │  │  │  │  ENTITIES (Domain) │    │    │    │ ← Règles métier pures
12 * │  │  │  └────────────────────┘    │    │    │
13 * │  │  └────────────────────────────┘    │    │
14 * │  └────────────────────────────────────┘    │
15 * └────────────────────────────────────────────┘
16 *
17 * ↑ Les flèches de dépendance pointent TOUJOURS vers l'intérieur
18 * Express dépend des Controllers, pas l'inverse
19 * Prisma dépend des Repositories, pas l'inverse
20 */
21
22// Structure dans un projet Node.js
23src/
24├── domain/                 // Entities — aucune dépendance externe
25│   ├── entities/
26│   │   ├── User.ts
27│   │   └── Tutorial.ts
28│   └── repositories/      // Interfaces (contrats)
29│       ├── IUserRepository.ts
30│       └── ITutorialRepository.ts
31│
32├── application/           // Use Cases
33│   └── usecases/
34│       ├── RegisterUser.ts
35│       └── GetTutorials.ts
36│
37├── infrastructure/        // Interface Adapters + Frameworks
38│   ├── repositories/      // Implémentations Prisma
39│   │   ├── PrismaUserRepository.ts
40│   │   └── PrismaTutorialRepository.ts
41│   ├── controllers/       // Express controllers
42│   │   ├── UserController.ts
43│   │   └── TutorialController.ts
44│   └── config/
45│       └── container.ts   // Injection de dépendances

Topics and skills covered

  • Clean Architecture
  • Layers
  • Dependency Rule
  • Use Cases