Maîtriser class, constructor, this et les propriétés privées #
1. Maîtriser la syntaxe
class, constructor et this
2. Comprendre new
Ce que fait le mot-clé new
3. Propriétés privées #
Protéger les données vraiment
4. Getters
Exposer en lecture seule
5. Encapsulation
Personne ne touche mes données directement
1. Rappel
class, constructor, this — solidifier les bases
2. Le problème
N'importe qui peut modifier les propriétés
3. Propriétés privées #
Personne ne touche mes données de l'extérieur
4. Getters
Exposer des données en lecture seule
5. Graine d'architecture
Private = protéger l'état interne (futur aggregate)
Rappel : class, constructor, this
Solidifier les bases
Un template pour créer des objets
class User {
name;
age;
}
Une class définit la structure de vos objets
Initialiser les propriétés à la création
class User {
constructor(name, age) {
this.name = name;
this.age = age;
}
}
constructor() est appelé automatiquement avec new
this = l'objet en cours de création
const user1 = new User('Alice', 25);
// this = user1
const user2 = new User('Bob', 30);
// this = user2
new fait 4 choses en arrière-plan
Le problème
N'importe qui peut modifier les propriétés directement
const user = new User('Alice', 25);
user.age = -5; // 😱 Valide mais absurde!
user.name = null; // 😱 Pas de validation
Les propriétés sont publiques par défaut
N'importe qui peut les modifier sans contrôle
Sans protection
Avec protection
Propriétés privées #
Personne ne touche mes données de l'extérieur
Vraiment privé, pas juste une convention
class User {
#name; // propriété privée
#age; // propriété privée
constructor(name, age) {
this.#name = name;
this.#age = age;
}
}
const user = new User('Alice', 25);
user.#age; // SyntaxError!
Impossible d'accéder à #age depuis l'extérieur
C'est une ERREUR JavaScript, pas juste une convention
_convention (faux privé)
this._age = 25;
user._age = -5; // ✅ Ça marche!
Juste une convention, pas de protection
#vraiPrivé
this.#age = 25;
user.#age = -5; // ❌ SyntaxError!
Vraiment protégé par le langage
Getters
Exposer des données en lecture seule
Lire sans pouvoir modifier
class User {
#age;
constructor(age) { this.#age = age; }
get age() {
return this.#age;
}
}
user.age → lit la valeur
user.age = 30 → impossible sans setter
class User {
#age;
get age() { return this.#age; }
set age(value) {
if (value < 0) throw new Error('Âge invalide');
this.#age = value;
}
}
Maintenant l'âge est validé !
Graine d'architecture
Private = protéger l'état interne
"Un objet doit garantir que son état reste valide"
État interne protégé
Personne ne peut casser l'objet
Accès contrôlé
Via getters/setters uniquement
Les aggregates protègent leur état exactement comme ça
Dans l'architecture Clean :
Les erreurs à éviter
✗ ERREUR
this._age = 25;
// Juste une convention
// Pas de protection réelle
✓ CORRECT
this.#age = 25;
// Vraiment privé
// Erreur si accès externe
✗ ERREUR
this.age = 25;
// Crée une propriété publique!
// #age reste undefined
✓ CORRECT
this.#age = 25;
// Accède à la propriété privée
const user = new User('Alice', 25);
user.#age; // SyntaxError: Private field...
Solution : utiliser un getter
user.age; // ✅ Via getter public
# = Vrai privé
Erreur si accès externe, pas juste une convention
Getter
Exposer en lecture seule, contrôle total
Encapsulation
Protéger les données = état valide garanti
Architecture
Les aggregates font exactement ça
Vous savez maintenant protéger vos données
Questions ?