ddd-ts-kit/domain-value-object-immutability
Identifiant d'architecture : domain/value-object-immutability (ajouté par ce plugin). Sévérité par défaut : error dans recommended, error dans strict.
S'applique à : domain/value-objects/ d'un contexte, tests exclus.
Pourquoi
Section intitulée « Pourquoi »Un objet-valeur est sa valeur. S'il peut changer, deux détenteurs de la même instance ne sont plus d'accord sur ce qu'ils détiennent, et l'égalité par valeur ne veut plus rien dire.
- une propriété ou une propriété-paramètre du constructeur sans
readonly(privées et#privatecomprises) - un accesseur
set - hors du constructeur, une affectation ou une incrémentation qui part de
this(this.props.cents += 1) - hors du constructeur, une méthode de modification de tableau appelée sur quelque chose de
this(push,pop,shift,unshift,splice,sort,reverse,fill,copyWithin)
Incorrect :
export class Amount { constructor(private cents: number) {} add(other: Amount): void { this.cents += other.cents; }}Correct :
export class Amount extends ValueObject<AmountProps> { add(other: Amount): Amount { return new Amount({ cents: this.props.cents + other.props.cents }); }}Aucune.
rules."domain/value-object-immutability" à off dans ddd-ts-kit.config.json désactive la règle, et // ddd-ts-kit-disable-next-line domain/value-object-immutability -- <reason> désactive une ligne, exactement comme pour ddd-ts-kit check.
- L'immuabilité profonde de ce que contient une propriété (
readonly items: string[]) n'est pas vérifiée : préférezreadonly string[]. - La modification d'une
Map, d'unSetou d'un objet par des appels de méthode n'est pas vue.
Avec le checker de la CLI
Section intitulée « Avec le checker de la CLI »Nouveau avec ce plugin : le checker de la CLI n'a pas d'équivalent, car la forme d'une classe demande un arbre syntaxique.