Aller au contenu
Filtrer les règles par style d’implémentation
Style
Tactique
Sévérité
majeure
S’applique à
  • Modèle (domain)

VO-04 · Changer une valeur, c’est la remplacer ​

Style
Tactique
Sévérité
majeure
S’applique à
  • Modèle (domain)

Signal ​

  • Une entity qui modifie un champ de son value object (this.address.city = ...).
  • Une copie modifiée champ par champ par un appelant.
  • Un objet devenu entity seulement parce que ses attributs doivent changer.

Pourquoi ​

Une entity garde sa valeur tant qu’elle est juste. Quand elle ne l’est plus, l’entity la remplace par une nouvelle. Rendre ce remplacement expressif : des fonctions qui renvoient une nouvelle instance, construite à partir de l’ancienne.

Exceptions ​

Aucune.

Correction ​

Une fonction qui renvoie la nouvelle valeur, et une méthode métier de l’entity qui réaffecte la propriété.

Exemple ​

ts
// Avoid: the holder changes a field of its address
this.#address.city = city;
ts
// Preferred: the address returns a new instance, the holder replaces its own
this.#address = this.#address.withCity(city);

withCity renvoie une nouvelle PostalAddress, construite à partir de l’ancienne, qui ne change pas. Le titulaire n’a qu’une affectation à faire, dans une de ses méthodes métier.