Chapitre 1 · Leçon 1
Une classe = une raison de changer
Section 1
Step 1
SRP : chaque classe doit avoir une seule raison de changer. Si une classe gère les données, les calculs ET l'affichage, elle a 3 raisons de changer — c'est une violation.
snippet.typescript
1// ❌ Violation SRP — UserManager fait tout
2class UserManager {
3 private db: Database;
4
5 constructor(db: Database) { this.db = db; }
6
7 // Raison 1 : logique métier
8 validateEmail(email: string): boolean {
9 return /^[^s@]+@[^s@]+.[^s@]+$/.test(email);
10 }
11
12 // Raison 2 : accès aux données
13 async saveUser(user: User): Promise<void> {
14 await this.db.query('INSERT INTO users...', [user]);
15 }
16
17 // Raison 3 : présentation
18 formatUserDisplay(user: User): string {
19 return `${user.firstName} ${user.lastName} <${user.email}>`;
20 }
21
22 // Raison 4 : envoi d'email
23 async sendWelcomeEmail(user: User): Promise<void> {
24 await emailService.send({ to: user.email, subject: 'Bienvenue!' });
25 }
26}Step 2
On découpe UserManager en classes focalisées. Chaque classe a maintenant une seule responsabilité et donc une seule raison de changer.