VO-01 · Un concept du domaine n’est pas un type primitif
Signal
Un concept du domaine rangé dans un string ou un number nu, alors que sa logique (format, normalisation, validation, calcul) finit chez ses appelants. Par exemple, un appelant corrige la casse d’un nom rangé dans un string.
Pourquoi
Un type primitif ne dit rien du domaine. Il ne peut pas porter de comportement propre au concept : la logique fuit dans le reste du modèle et chez les appelants. Un value object garde le concept entier en un seul endroit. Par exemple, il normalise le nom à sa création.
Exceptions
Les attributs simples et isolés, sans comportement ni lien avec d’autres attributs (un booléen, un nombre isolé). Envelopper un attribut de trop est une erreur sans gravité : un petit refactoring la corrige.
Correction
Un value object nommé dans l’ubiquitous language, qui porte le format et la validation.
Voir aussi
ENT-03 applique la même règle aux identités. ENT-15 en montre un exemple avec HolderName.