Aller au contenu
Filtrer les règles par style d’implémentation
Partie 2 · Logique du domaine

Entities ​

Une entity se définit par une identité qui reste stable dans le temps, et par des méthodes métier nommées dans le langage. Ces règles disent quand en créer une, comment l’identifier, comment elle porte un comportement au lieu d’exposer des données, et comment la construire et la valider.

Plusieurs d’entre elles complètent AGG-05 (l’identité de l’aggregate root). La section Voir aussi le signale à chaque fois.

En pratique ​

Un titulaire de wallet est une entity : il garde son identité pendant que son statut change.

ts
export class Holder extends AggregateRoot<HolderId> {
	#status: HolderStatus;

	private constructor(id: HolderId, status: HolderStatus) {
		super(id);
		this.#status = status;
	}

	static restore(id: HolderId, status: HolderStatus): Holder {
		return new Holder(id, status);
	}

	isActive(): boolean {
		return this.#status === 'active';
	}

	close(at: Date): Result<void, HolderIsClosed> {
		if (this.#status === 'closed') {
			return err(new HolderIsClosed(this.id));
		}

		this.#status = 'closed';
		this.record<HolderClosed>({ ...eventMetadata(at), type: 'wallets.holder.HolderClosed', holderId: this.id });

		return ok();
	}
}
  • L’identité est un value object typé, et ne change jamais (ENT-03, ENT-06).
  • Du comportement, pas des données : close et isActive sont nommés dans le langage, et il n’y a aucun setter (ENT-10, ENT-11).
  • Une intention, une méthode, un event : fermer enregistre HolderClosed (ENT-12).

Règles ​

Nature d’une entity

CodeRègleSévéritéDétection
ENT-01Une entity seulement quand l’identité et le changement comptent mineure
ENT-02Une entity ne porte que ce que ses use cases écrivent ou lisent question

Identité

CodeRègleSévéritéDétection
ENT-03L’identité est un value object mineure
ENT-04Une identité saisie par l’utilisateur doit être stable majeure
ENT-05L’identité est générée tôt quand elle sert avant la persistance majeure
ENT-06L’identité ne change jamais majeure
ENT-07Deux entities sont égales si leurs identités le sont mineure
ENT-08L’id technique de persistance reste caché mineure
ENT-09En multi-tenant, chaque entity et chaque requête portent l’identité du tenant conditionnellebloquante

Comportement

CodeRègleSévéritéDétection
ENT-10Pas d’anemic model majeure
ENT-11Les méthodes du domaine sont nommées dans le langage du métier mineure
ENT-12Une intention, une méthode, un event majeure
ENT-13Les secrets ne sortent pas de l’entity bloquante

Construction et validation

CodeRègleSévéritéDétection
ENT-14Une entity naît complète majeure
ENT-15Chaque attribut est protégé par une précondition mineure
ENT-16La validation de l’objet entier est à part et collecte toutes les erreurs mineure

Historique

CodeRègleSévéritéDétection
ENT-17L’historique qui compte pour le métier passe par des domain events question