Aller au contenu

Cycle de vie des données

Status: CONTRACT

Rôle

Cette page explique comment une donnée traverse CMonChoix Platform depuis sa réception jusqu'à sa consommation, sans mélanger les responsabilités de chaque étape.

Le cycle de vie n'est pas une simple suite de tables. Il décrit une progression logique : acquisition, préparation, décision métier, projection, persistance, lecture.

Vue d'ensemble

Feed marchand
      ↓
Réception / import
      ↓
Stage
      ↓
Normalisation
      ↓
Enrichissement
      ↓
Domain Core + Vertical Modules
      ↓
Résolution / Canonical Identity
      ↓
Projection Builder
      ↓
Write Service
      ↓
Persistance
      ↓
Read Services / Frontend / Runtime adapters

Selon le composant, certaines étapes peuvent être matérialisées différemment. Le principe important est la séparation des responsabilités, pas l'existence obligatoire d'une table pour chaque case.

1. Réception

Les données proviennent d'une source marchande externe.

À ce stade :

  • elles décrivent ce que le marchand publie ;
  • aucune vérité métier CMonChoix n'est encore construite ;
  • les erreurs ou ambiguïtés de la source doivent rester traçables.

2. Import

L'import rend la source exploitable par le Pipeline tout en conservant son origine.

Les objectifs sont notamment :

  • traçabilité ;
  • reprise ;
  • audit ;
  • comparaison entre exécutions.

L'import ne doit pas fabriquer silencieusement une Canonical Identity.

3. Stage

Le Stage est une zone de travail proche de la source.

Il peut servir à :

  • préparer les traitements ;
  • auditer les données ;
  • comparer des runs ;
  • simuler des transformations.

Le Stage n'est pas une couche Frontend et n'est pas une vérité métier.

4. Normalisation

La normalisation harmonise les représentations techniques et syntaxiques pour rendre les données comparables.

Elle peut par exemple :

  • nettoyer des formats ;
  • normaliser des identifiants ;
  • uniformiser des valeurs ;
  • préparer les règles de résolution.

Elle ne doit pas confondre harmonisation et décision métier.

5. Enrichissement

L'enrichissement ajoute des informations calculées ou dérivées utiles aux étapes suivantes.

Les enrichissements génériques restent dans les couches génériques ; les règles spécifiques à une famille de produits appartiennent aux Vertical Modules.

6. Résolution et Canonical Identity

Le Resolver examine les preuves disponibles et produit un résultat explicite.

Les statuts canoniques doivent rester distincts :

  • resolved ;
  • unknown ;
  • ambiguous ;
  • conflict.

Le cycle de vie ne garantit pas qu'une donnée devienne forcément resolved. Une absence de preuve suffisante peut conduire légitimement à unknown, et un conflit réel doit rester visible.

7. Projection

Le Projection Builder transforme l'état amont validé en Read Model déterministe.

Il décide de la forme projetée mais n'écrit pas directement dans la persistance.

Une projection :

  • est dérivée ;
  • est optimisée pour la lecture ;
  • reste reconstruisible ;
  • ne devient pas une nouvelle vérité métier.

8. Persistance par Write Service

La mutation durable appartient à un Write Service ou à un mécanisme technique explicitement identifié.

Le Write Service applique une décision ou un résultat déjà produit. Il ne doit pas inventer une règle métier au moment de l'écriture.

Pour une reconstruction importante :

Builder
→ résultat en mémoire
→ Write Service
→ compteurs d'exécution
→ audit de validation

9. Lecture

Les consommateurs lisent des projections ou des contrats de lecture adaptés à leur besoin.

Le Frontend ne doit pas recalculer :

  • l'identité ;
  • les conflits ;
  • le meilleur candidat ;
  • les règles de projection.

Les Read Services observent et analysent sans écrire.

États techniques et états métier

Ne pas confondre :

  • l'état d'un run ou d'un batch ;
  • l'état d'une ligne intermédiaire ;
  • le statut de résolution métier ;
  • l'état d'une projection ;
  • l'état d'un cache ou d'un lock.

Deux valeurs appelées status peuvent avoir des significations complètement différentes selon la couche.

Avant tout diagnostic, identifier le contrat du statut observé.

Reconstruction

Une reconstruction n'est pas un retour en arrière dans le cycle de vie.

Elle consiste à repartir d'un état amont fiable pour recalculer un état dérivé.

Exemples :

  • reconstruire une projection après évolution de code ;
  • régénérer une navigation ;
  • reconstruire un cache ;
  • recalculer une famille Product Models.

Pour la famille Product Models documentée actuellement :

Product Models
→ Variants
→ Specifications
→ Gallery

La disponibilité concrète des services et commandes doit être vérifiée avant exécution.

Données historiques altérées

Lorsqu'un ancien comportement a déjà muté destructivement un état dérivé, cet état ne doit pas servir de baseline.

La démarche correcte est :

  1. retrouver l'état amont sain ;
  2. reconstruire l'état dérivé ;
  3. relancer l'audit ;
  4. seulement ensuite comparer ou valider la nouvelle politique.

C'est particulièrement important pour les historiques Media Quality ayant pu altérer image_norm.

Reprise après interruption

Une interruption peut laisser :

  • un run incomplet ;
  • une projection partiellement reconstruite ;
  • un état technique de queue incohérent ;
  • des compteurs partiels.

Ne pas relancer aveuglément.

Avant reprise :

  1. identifier le dernier état cohérent ;
  2. vérifier l'idempotence du service concerné ;
  3. vérifier le périmètre du rejeu ;
  4. conserver les erreurs et skipped rows visibles ;
  5. réauditer après reprise.

Ce qu'il ne faut pas faire

Ne jamais utiliser le cycle de vie comme justification pour :

  • écrire directement dans une projection ;
  • transformer un ambiguous en resolved par SQL ;
  • relire une projection comme source autoritaire du Pipeline ;
  • laisser le Frontend corriger une donnée manquante ;
  • lancer une mutation pendant un audit ;
  • supposer qu'un run plus récent est automatiquement plus fiable.

Tests attendus

Les transitions importantes doivent être testées pour :

  • déterminisme ;
  • traçabilité ;
  • reprise ;
  • idempotence des writes ;
  • absence d'écriture dans les lectures ;
  • conservation des statuts unknown, ambiguous, conflict ;
  • reconstruction d'états dérivés ;
  • comportement sur entrée partielle ou invalide.

Invariants

  1. Chaque étape possède une responsabilité explicite.
  2. La résolution peut légitimement rester incertaine.
  3. Une projection est calculée avant d'être persistée.
  4. La persistance ne fabrique pas la décision métier.
  5. Les consommateurs lisent sans reconstruire l'amont.
  6. Les états dérivés restent reconstruisibles.
  7. Une reprise est bornée et vérifiée.
  8. Une baseline historiquement altérée est régénérée avant comparaison.

Voir aussi