Specification
Architecture 🔴 SeniorDefinition
Encapsule une regle metier dans un objet reutilisable et composable. Les specifications peuvent etre combinees avec AND, OR, NOT.
Analogie
Les filtres d'une recherche immobiliere : 3 chambres ET jardin ET moins de 300k — chaque critere est un filtre composable.
Exemple de code
class ActiveUserSpec {
isSatisfiedBy(user) { return user.active && !user.banned; }
}
class AndSpec {
constructor(a, b) { this.a = a; this.b = b; }
isSatisfiedBy(x) { return this.a.isSatisfiedBy(x) && this.b.isSatisfiedBy(x); }
}
Cas d'usage
Regles metier complexes reutilisees dans les requetes, validations et autorisations.
Anti-pattern
Dupliquer les regles metier dans le repository, le service et le controleur.