ddd-ts-kit/application-command-query-separation
Identifiant d'architecture : application/command-query-separation (ajouté par ce plugin). Sévérité par défaut : warn dans recommended, error dans strict.
S'applique à : les fichiers sous application/queries/ d'un contexte, tests exclus.
Pourquoi
Section intitulée « Pourquoi »Une requête répond et ne change jamais l'état : on peut alors la relancer, la mettre en cache et l'exécuter sur une réplique. Une requête qui enregistre est une commande avec une valeur de retour.
- un appel de
save,deleteoupublishsur quelque chose que tient le gestionnaire (this.invoices.save(...),this.#bus.publish(...))
Incorrect :
export class SearchInvoicesHandler { async execute(query: SearchInvoicesQuery): Promise<SearchInvoicesResult> { await this.audit.save(query); return this.reader.read(query); }}Correct :
export class SearchInvoicesHandler { async execute(query: SearchInvoicesQuery): Promise<SearchInvoicesResult> { return this.reader.read(query); }}Pragmatique par conception : la règle reconnaît des noms de méthodes sur les dépendances atteintes par this. Un Set local dont on appelle delete n'est pas signalé.
[{ "mutators": ["save", "delete", "publish"] }] remplace la liste des noms de méthodes.
rules."application/command-query-separation" à off dans ddd-ts-kit.config.json désactive la règle, et // ddd-ts-kit-disable-next-line application/command-query-separation -- <reason> désactive une ligne, exactement comme pour ddd-ts-kit check.
- Une modification derrière un autre nom (
upsert,record) demande l'optionmutators. - Une dépendance passée en argument plutôt qu'injectée n'est pas suivie.
- L'autre moitié du principe, une commande qui renvoie plus qu'un identifiant, est laissée à la revue.
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.