VO-05 · Les méthodes d’un value object n’ont pas d’effet de bord et parlent le langage du métier
Signal
- Une méthode de value object qui modifie son instance, ses paramètres ou quoi que ce soit d’autre.
- Une méthode qui reçoit une entity en paramètre (
feeRate.applyTo(transfer)). - Des méthodes nommées
getX()là où l’ubiquitous language dit X.
Pourquoi
Toutes les méthodes d’un value object immuable sont des fonctions sans effet de bord. C’est ce qui le rend sûr : on peut l’appeler partout, sans craindre de changer quoi que ce soit.
Une méthode qui reçoit une entity dépend de la forme de cette entity. Elle cache ce qu’elle en utilise, et ne peut pas prouver qu’elle la laisse intacte. Passer plutôt des valeurs (feeRate.applyTo(transfer.sourceAmount())).
Éviter aussi le préfixe get. valuePercentage() parle le langage du métier ; getValuePercentage() est du jargon technique.
Exceptions
On ne peut pas toujours limiter les paramètres à des valeurs. C’est un objectif, pas une obligation.
Correction
- Des valeurs en paramètre.
- Une nouvelle instance en retour quand la valeur change.
- Des noms tirés de l’ubiquitous language.