Spécifications du domaine Product¶
Statut¶
Spécification normative du domaine métier Product.
À quoi sert cette page ?¶
Les Specifications du domaine Product sont des règles de vérification métier.
Une Specification répond généralement à une question précise par true ou false, par exemple :
« L'identité de ce produit est-elle suffisamment complète ? »
ou :
« Ces identifiants se contredisent-ils ? »
Leur objectif est de rendre les règles testables, réutilisables et explicites plutôt que de les disperser dans plusieurs if différents.
IsProductIdentityComplete¶
Retourne vrai lorsque l'identité canonique contient suffisamment d'informations stables pour représenter le produit.
La notion de « suffisamment » dépend du contrat du domaine et, lorsque nécessaire, des règles de la verticale.
HasConflictingIdentifiers¶
Retourne vrai lorsque plusieurs identifiants attachés au produit sont incompatibles entre eux.
Exemple : deux références fiables censées identifier le même produit mais pointant vers des marques ou modèles incompatibles.
HasConflictingObservations¶
Retourne vrai lorsque des observations se contredisent entre elles ou contredisent l'identité canonique.
Une contradiction détectée ne doit pas être écrasée par la dernière observation reçue.
IsVariantOfProduct¶
Retourne vrai lorsque les VariantAttributes décrivent bien une version du même produit et non un produit distinct.
Exemple : selon la verticale smartphone, une capacité de stockage différente peut représenter une variante ; un modèle Ultra différent peut au contraire représenter un autre produit.
RequiresConflictReview¶
Retourne vrai lorsque les preuves disponibles ne permettent pas de maintenir ou d'établir l'identité en toute sécurité.
Ce résultat signifie : ne pas forcer la résolution automatiquement.
CanAttachIdentifier¶
Retourne vrai lorsqu'un nouvel identifiant peut être attaché sans violer les invariants Product.
Cela permet de vérifier la cohérence avant de modifier l'agrégat.
CanAttachObservation¶
Retourne vrai lorsqu'une observation peut être attachée sans remplacer silencieusement l'identité canonique.
Une observation contradictoire peut être conservée comme preuve tout en déclenchant un conflit : « attacher » ne signifie pas forcément « accepter comme vérité ».
CanAttachVariant¶
Retourne vrai lorsqu'une variante appartient bien au produit et ne décrit pas en réalité un produit différent.
IsConsistentProduct¶
Retourne vrai lorsque le produit ne contient aucun conflit non résolu et satisfait les règles de cohérence de son identité.
Pourquoi séparer les Specifications ?¶
Sans cette séparation, on risque de retrouver la même décision sous plusieurs formes :
if (...) dans le Resolver
if (...) dans le Pipeline
if (...) dans une commande CLI
if (...) dans une projection
Au bout de quelques évolutions, ces versions finissent par diverger.
Une Specification donne un nom clair à la question métier et permet de la tester séparément.
Règles techniques¶
Les Specifications doivent être :
- déterministes ;
- sans effet de bord ;
- testables ;
- indépendantes de l'infrastructure ;
- indépendantes de la persistance ;
- indépendantes du frontend.
Sans effet de bord¶
Une Specification ne doit pas modifier le produit pendant qu'elle vérifie une condition.
Par exemple, HasConflictingIdentifiers doit uniquement répondre à la question. Elle ne doit pas supprimer elle-même un identifiant ou réécrire l'identité.
Exemple de diagnostic¶
Si une variante incorrecte est attachée :
- vérifie si
IsVariantOfProductaurait dû retourner faux ; - vérifie les données utilisées par cette règle ;
- vérifie si
CanAttachVarianta réellement été appelée ; - cherche si une autre couche contourne cette vérification ;
- corrige le chemin responsable puis rejoue les tests et la reconstruction nécessaire.
Signaux d'alerte¶
Il faut être prudent si une Specification :
- écrit en base ;
- dépend de WordPress ;
- appelle un service réseau ;
- donne des résultats différents à entrée identique ;
- modifie l'objet qu'elle évalue ;
- contient des règles de présentation frontend.
Décision d'architecture¶
Décision : CERTIFIED.
Les Product Specifications définissent les prédicats métier réutilisables qui préparent les règles exécutables et leurs tests.