Le problème
Dans beaucoup de codebases, presque tout devient une entité.
On crée des classes ou des types pour :
- tout ce qui a des données
- tout ce qui mérite une structure
Résultat: des entités gonflées, peu cohérentes, difficiles à comparer, à copier, à modifier sans aller casser du code ailleurs.
La distinction
Entity
- Identité. Tu la reconnais par qui elle est, pas ce qu’elle contient.
- Continuité. Elle peut changer, mais reste “elle”.
- Cycle de vie. Elle a des opérations, des états, une histoire.
- Exemple:
User,Order,Account.
Value Object
- Valeur. Tu la reconnais par ce qu’elle contient.
- Immuable (idéalement). Si la valeur change, c’est un nouvel objet.
- Pas de cycle de vie. C’est juste une valeur.
- Exemple:
Money,Date,Color,Address.
Pourquoi ça compte
Mal classer → bien des problèmes :
- Entités traitées comme des values → coups durs en parallèle
- Values traitées comme entités → logique métier dispersée
- Identité floue → bugs de comparaison bizarres
- Mutabilité surprise → modifications non-intentionnelles