Entity vs Value Object

Distinguer identité et valeur pour modéliser correctement les concepts métier et éviter des entités ou objets valeur mal définis.

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