VO-02 · Des attributs qui vont ensemble forment un tout
Signal
Des attributs qui n’ont de sens qu’ensemble, rangés dans des champs séparés d’une entity :
- le cas classique : un montant et sa devise (
amount: numberetcurrency: string) ; - une période en deux dates ;
- une adresse en champs dispersés ;
- un taux de change rangé à part de sa paire de devises.
Pourquoi
Seul, chaque attribut décrit autre chose, ou rien du tout. Le modèle et ses appelants doivent alors savoir quand et comment les utiliser ensemble.
Quand des attributs vont ensemble mais sont peu liés au reste de l’entity, les regrouper dans un ou plusieurs value objects nommés dans l’ubiquitous language.
Exceptions
Aucune.
Correction
Un value object par tout conceptuel (Money, Period, PostalAddress). Il devient une propriété de l’entity.
Exemple
ts
// Avoid: amount and currency live apart
class Transfer {
amount: number;
currency: string;
}ts
// Preferred: one conceptual whole, one property
class Transfer {
readonly #amount: Money;
}