Objectifs


Partie 1 — La donnée dans un SI

1.1 Trois questions fondamentales

Chaque donnée dans un système d'information soulève trois questions que tout architecte doit se poser :

flowchart TB
  Donnee["Donnée"]
  Donnee --> Q1["1. Qui en est propriétaire ? <br> source de vérité"]
  Donnee --> Q2["2. Où est-elle stockée ? <br> localisation, latence"]
  Donnee --> Q3["3. Qui peut la lire / modifier ? <br> cohérence, accès concurrent"]

1.2 La source de vérité

Dans un système distribué, la même information peut exister à plusieurs endroits (cache, réplicas, copies dans d'autres services). Il faut désigner une seule source de vérité pour chaque donnée.

flowchart LR
  subgraph bon ["Bonne pratique — source de vérité unique"]
    SvcCat["Service Catalogue<br>(source de vérité du prix)"]
    SvcCart["Service Panier<br>(lit le prix via API)"]
    SvcOrder["Service Commande<br>(copie le prix commande)"]
    SvcCart -->|"GET /products/sku-A/price"| SvcCat
    SvcOrder -->|"stocke prix = 29.90€ à t=0"| SvcOrder
  end
flowchart LR
  subgraph mauvais ["Anti-pattern — plusieurs sources de vérité"]
    SvcA["Service A <br> prix = 29.90€"]
    SvcB["Service B <br> prix = 31.00€ (!sync)"]
    SvcC["Service C <br> prix = 28.50€ (cache périmé)"]
    User["Utilisateur"] -->|"voit des prix différents"| SvcA & SvcB & SvcC
  end

1.3 Propriété et frontières

Donnée Propriétaire (source de vérité) Les autres font...
Prix d'un produit Service Catalogue Lisent le prix via API au moment de la mise au panier ; figent une copie du prix dans la commande au moment du paiement — le prix historique ne doit jamais changer si le catalogue évolue
Statut d'une commande Service Commande Consomment l'événement OrderStatusChanged pour mettre à jour leurs propres projections (ex : Service Notification envoie un email, Service Livraison prépare l'expédition)
Solde d'un compte Service Paiement Ne stockent jamais de copie — interrogent l'API dédiée à chaque besoin ; toute lecture locale serait potentiellement périmée et constituerait un risque financier
Nom / email de l'utilisateur Service Compte Stockent uniquement l'identifiant (userId) ; récupèrent les champs d'affichage à la demande via API, ou en copient un sous-ensemble minimal (ex : displayName) si la lecture est très fréquente

Partie 2 — Localisation des données et latence

2.1 La latence n'est pas nulle