ddd-ts-kit/event-sourcing-state-in-apply
Identifiant d'architecture : event-sourcing/state-in-apply. Sévérité par défaut : error dans recommended, error dans strict.
S'applique à : domain/aggregates/ d'un contexte, tests exclus : les classes qui étendent EventSourcedAggregate.
Pourquoi
Section intitulée « Pourquoi »Un agrégat en event sourcing se reconstruit en rejouant ses événements à travers ses méthodes d'application (apply). Une commande qui écrit aussi l'état elle-même laisse un état qu'aucun rejeu ne reconstruit : l'agrégat se comporte d'une façon juste après la commande et d'une autre une fois rechargé.
- hors du constructeur, des méthodes statiques et des méthodes d'application (
apply<Fact>, etrestorepour un snapshot), une affectation ou une incrémentation qui part dethis - au même endroit, un appel qui modifie quelque chose de
this(push,splice,sort,set,add,delete,clear...) - dans une méthode d'application,
this.record(..): un rejeu enregistrerait l'événement une seconde fois
Incorrect :
noteNoShow(appointmentId: string, now: Date): void { this.state = { noShows: this.state.noShows + 1 }; this.record(new NoShowNoted(this.id, now, appointmentId));}Correct :
noteNoShow(appointmentId: string, now: Date): void { this.record(new NoShowNoted(this.id, now, appointmentId));}
private applyNoShowNoted(event: NoShowNoted): void { this.state = { noShows: this.state.noShows + 1 };}Aucune.
rules."event-sourcing/state-in-apply" à off dans ddd-ts-kit.config.json désactive la règle, et // ddd-ts-kit-disable-next-line event-sourcing/state-in-apply -- <reason> désactive une ligne, exactement comme pour ddd-ts-kit check.
- Une écriture par un alias local (
const state = this.state; state.items.push(x)) n'est pas suivie. - Une classe qui étend
EventSourcedAggregatesous un autre nom (un alias, une classe de base du projet) n'est pas reconnue.
Avec le checker de la CLI
Section intitulée « Avec le checker de la CLI »ddd-ts-kit check signale le même identifiant à partir du texte des fichiers : les écritures qu'il trouve dans le corps des méthodes d'une classe dont la superclasse s'écrit EventSourcedAggregate. Cette règle fait autorité.