Aller au contenu

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 :

  1. vérifie si IsVariantOfProduct aurait dû retourner faux ;
  2. vérifie les données utilisées par cette règle ;
  3. vérifie si CanAttachVariant a réellement été appelée ;
  4. cherche si une autre couche contourne cette vérification ;
  5. 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.

Voir aussi