VO-04 · Changer une valeur, c’est la remplacer
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.